首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sharex=True将日期绘制为ValueError:序数必须为>= 1

使用sharex=True将日期绘制为ValueError:序数必须为>= 1
EN

Stack Overflow用户
提问于 2012-11-24 17:14:34
回答 1查看 22.5K关注 0票数 13

在做一些分析时,我偶然发现了一个ValueError,我可以将它归结为以下简单的示例,它可以重现我得到的错误:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt

x = np.array([dt.datetime(2012, 10, 19, 10, 0, 0),
              dt.datetime(2012, 10, 19, 10, 0, 1),
              dt.datetime(2012, 10, 19, 10, 0, 2),
              dt.datetime(2012, 10, 19, 10, 0, 3)])

y = np.array([1, 3, 4, 2])

在尝试绘制这个简单的x和y数组时,我没有遇到任何问题:

代码语言:javascript
复制
fig, ax = plt.subplots()
ax.plot(x, y)

代码语言:javascript
复制
fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(x, y)

但是在添加sharex=True时,我得到一个错误:

代码语言:javascript
复制
fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
ax1.plot(x, y)

错误消息:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 2445, in home
    self._update_view()
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 2818, in _update_view
    self.draw()
  File "C:\Python27\lib\site-packages\matplotlib\backend_bases.py", line 2796, in draw
    loc.refresh()
  File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 758, in refresh
    dmin, dmax = self.viewlim_to_dt()
  File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 530, in viewlim_to_dt
    return num2date(vmin, self.tz), num2date(vmax, self.tz)
  File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 289, in num2date
    if not cbook.iterable(x): return _from_ordinalf(x, tz)
  File "C:\Python27\lib\site-packages\matplotlib\dates.py", line 203, in _from_ordinalf
    dt = datetime.datetime.fromordinal(ix)
ValueError: ordinal must be >= 1

我在matplotlib (https://github.com/matplotlib/matplotlib/issues/162)中发现了一个关于使用日期为twinx的问题,这给出了同样的错误。是同一个bug吗?这似乎是一个已知已久的错误,但尚未解决。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 18:33:30

如果在第二个轴上绘制某些内容,则可以避免该错误:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import datetime as dt

x = np.array([dt.datetime(2012, 10, 19, 10, 0, 0),
              dt.datetime(2012, 10, 19, 10, 0, 1),
              dt.datetime(2012, 10, 19, 10, 0, 2),
              dt.datetime(2012, 10, 19, 10, 0, 3)])

y = np.array([1, 3, 4, 2])

fig, (ax1, ax2) = plt.subplots(nrows = 2, sharex = True)
ax1.plot(x, y, 'b-')
ax2.plot(x, 1.0/y, 'r-')
plt.show()
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13539868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档