Я недавно перешел с версии 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 вышеприведенный код работал как обходной путь для (по-видимому) невозможности сброса xaxis с помощью оператора ax.axis (v). Теперь, под 1.0.1, две точки 'ko' заканчиваютсяНаходясь вне осей, независимо от того, вызывается ли ax.plot_date с использованием a1 и a2 в единицах «days» или «datetime.date».
возможно, что две точки «ko» не отображаются.но чтобы заметить, что они на самом деле отображаются, раскомментируйте вызов ax.axis (v) (который отлично работает в 1.0.1), а затем найдите два четверти круга в нижних углах области осей.
Хотя верно, что более чистый способ расширения xaxis - это использование оператора 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])