Python 使用sharex=True打印日期会导致ValueError:序号必须为>;=1.
在进行一些分析时,我偶然发现了一个ValueError,我可以将其归结为以下简单的示例,可以重现我得到的错误:Python 使用sharex=True打印日期会导致ValueError:序号必须为>;=1.,python,numpy,matplotlib,Python,Numpy,Matplotlib,在进行一些分析时,我偶然发现了一个ValueError,我可以将其归结为以下简单的示例,可以重现我得到的错误: 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.d
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阵列时,我没有以下问题:
fig, ax = plt.subplots()
ax.plot(x, y)
或
但是当添加sharex=True
时,我得到一个错误:
fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
ax1.plot(x, y)
错误消息:
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()中发现了一个关于使用
twinx
的问题,日期给出了相同的错误。是同一个错误吗?这似乎是一个早就知道的错误,但尚未解决。如果在第二个轴上绘制某些内容,则可以避免错误:
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()
啊哈!谢谢然后我想我的代码中还有另一个bug,阻止了第二个轴的数据被绘制,所以我看到了这个错误。
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()