8

を表示するためにmatplotlibのimshow()関数を使用していpandas.DataFrameます。

x 軸と y 軸の両方のラベルと目盛りを DataFrame.index および DataFrame.columns リストから描画したいのですが、その方法がわかりません。

dataそれが であると仮定するとpandas.DataFrame:

>>> print data
<class 'pandas.core.frame.DataFrame'>
Index: 201 entries,  1901 to  2101
Data columns:
jan    201  non-null values
feb    201  non-null values
mar    201  non-null values
apr    201  non-null values
may    201  non-null values
jun    201  non-null values
jul    201  non-null values
aug    201  non-null values
sep    201  non-null values
oct    201  non-null values
nov    201  non-null values
dec    201  non-null values

私がこれを行うとき:

ax1 = fig.add_subplot(131, xticklabels=data.columns, yticklabels=data.index)
ax1.set_title("A")
ax1.tick_params(axis='both', direction='out')
im1 = ax1.imshow(data, 
                 interpolation='nearest', 
                 aspect='auto',
                 cmap=cmap )

画像の y 軸に適切な間隔の目盛りラベルが表示されますが、ラベルは 1901 ~ 2101 ではなく 1901 ~ 1906 です。同様に、x 軸の目盛りラベルは 1 月~12 月ではなく 2 月~7 月です。

私が使用する場合

ax1 = fig.add_subplot(131) # without specifying tick labels

次に、軸の目盛りラベルが単に基になる ndarray インデックス値 (つまり、0-201 と 0-12) になるだけです。目盛りとラベルの間隔や量を変更する必要はありません。ラベル テキストを DataFrame のインデックスと列のリストから取得したいだけです。簡単なものを見逃しているかどうかわかりませんか?

前もって感謝します。

4

3 に答える 3

8

この問題は、既存の目盛りの目盛りラベルを指定することに関係していると思います。デフォルトでは、ラベルより目盛りが少ないため、最初のいくつかのラベルのみが使用されます。以下は、最初にティック数を設定することで機能するはずです。

ax1 = fig.add_subplot(131)
ax1.set_title("A")
ax1.tick_params(axis='both', direction='out')
ax1.set_xticks(range(len(data.columns)))
ax1.set_xticklabels(data.columns)
ax1.set_yticks(range(len(data.index)))
ax1.set_yticklabels(data.index)
im1 = ax1.imshow(data, interpolation='nearest', aspect='auto', cmap=cmap)

これにより、y 軸で毎年の目盛りが生成されるため、インデックス値のサブセットを使用することをお勧めします。

于 2012-08-01T16:47:05.453 に答える