2

我最近从 matplotlib 版本“0.99.1.1”转移到“1.0.1”。我遇到的一个新故障与“自动轴尺寸标注”有关......并非所有数据点最终都会显示出来。这是一些重现我的问题的代码,下面是更多讨论。

import datetime
from pylab import *
print matplotlib.__version__
x = [datetime.date(2011,2,11),
     datetime.date(2011,3,11),
     datetime.date(2011,4,11),
     datetime.date(2011,5,11),
     datetime.date(2011,6,11),
     datetime.date(2011,7,11)]
y = [23,41,67,72,18,19]
fig = figure()
ax = fig.add_subplot(111)
ax.plot_date(x, y, 'kx')

# next task is to broaden the xaxis so that it begins 
# and ends at the start of a month (approximately).  
xmin, xmax, ymin, ymax = ax.axis() ; print xmin, xmax, ymin, ymax
a1 = xmin - min(x).day + 1
a2 = xmax - max(x).day + 31

#a1 = datetime.date(1,1,1) + datetime.timedelta(a1)
#a2 = datetime.date(1,1,1) + datetime.timedelta(a2)

#ax.axis([a1,a2,ymin,ymax]) #

ax.plot_date(a1, ymin, 'ko')
ax.plot_date(a2, ymin, 'ko')

show()

在 0.99.1 下,上述代码可以很好地解决(似乎)无法通过 ax.axis(v) 语句重置 xaxis 的解决方法。现在,在 1.0.1 下,无论是使用 a1 和 a2 以“days”还是“datetime.date”为单位调用 ax.plot_date,两个 'ko' 点最终都位于轴之外。

可能没有绘制两个“ko”点。但要观察它们实际上正在被绘制,请取消注释 ax.axis(v) 调用(在 1.0.1 中工作正常),然后在轴区域的底角寻找两个四分之一圆。

虽然扩展 xaxis 的一种更简洁的方法确实是使用 ax.axis(v) 语句,但上述行为让我对“自动轴尺寸标注”感到紧张......尽管我更有可能错误地编码了一些东西或其他。

编辑:fwiw ...下面的代码允许扩大到月份的第一个月,准确地说

xmin, xmax, ymin, ymax = ax.axis() #; print xmin, xmax, ymin, ymax
a1 = datetime.date.fromordinal(int(xmin)) #; print 'a1= ', a1
a2 = datetime.date.fromordinal(int(xmax)) #; print 'a2= ', a2

y1, m1 = a1.year, a1.month 
y2, m2 = a2.year, a2.month + 1

a1 = datetime.date(y1,m1,1) #; print 'a1= ', a1
a2 = datetime.date(y2,m2,1) #; print 'a2= ', a2

ax.axis([a1,a2,ymin,ymax])
4

1 回答 1

2

发生的事情是在您调用ax.axis(). 调用axis会关闭自动缩放(它假设如果您手动获取轴限制,您可能不希望它们更改)。

只需在绘制完所有内容后添加一个ax.axis('auto')或一个。ax.set_autoscale_on()

import datetime
import matplotlib.pyplot as plt
x = [datetime.date(2011,2,11),
     datetime.date(2011,3,11),
     datetime.date(2011,4,11),
     datetime.date(2011,5,11),
     datetime.date(2011,6,11),
     datetime.date(2011,7,11)]
y = [23,41,67,72,18,19]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot_date(x, y, 'kx')

# next task is to broaden the xaxis so that it begins 
# and ends at the start of a month (approximately).  
xmin, xmax, ymin, ymax = ax.axis() ; print xmin, xmax, ymin, ymax
a1 = xmin - min(x).day + 1
a2 = xmax - max(x).day + 31

ax.plot_date(a1, ymin, 'ko')
ax.plot_date(a2, ymin, 'ko')
ax.axis('auto')

plt.show()
于 2011-05-14T20:56:15.770 回答