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では、ax.plot_dateが「日」または「datetime.date」の単位でa1とa2を使用して呼び出されているかどうかに関係なく、2つの「ko」ポイントは軸の外側になります。

2つの「ko」ポイントがプロットされていない可能性があります。ただし、実際にプロットされていることを確認するには、ax.axis(v)呼び出し(1.0.1で正常に機能します)のコメントを解除してから、軸領域の下隅にある2つの四分円を探します。

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])
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 に答える