我最近从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)语句重置X轴的问题。现在,在1.0.1版本中,无论ax.plot_date是使用a1和a2调用的,还是以'days‘或’DateTim.Date‘为单位调用的,两个'ko’点最终都在轴外。
有可能这两个“ko”点没有被绘制出来。但是要观察到它们实际上是被绘制的,可以取消对ax.axis(v)调用的注释(在1.0.1中工作得很好),然后在轴区域的底角寻找两个四分之一圆。
虽然扩展X轴的一种更简洁的方法是使用ax.axis(v)语句,但上面的行为让我对‘自动轴尺寸标注’感到紧张……尽管更有可能的是我写错了代码。
编辑:FWIW...下面的代码精确地允许展宽到月份的1号
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])发布于 2011-05-15 04:56:16
实际情况是,在调用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()https://stackoverflow.com/questions/6004669
复制相似问题