[解決済み】ティックラベルのテキストを変更する
質問
プロットで選択されたいくつかの目盛りラベルに、いくつかの修正を加えたい。
例えば、こうすると。
label = axes.yaxis.get_major_ticks()[2].label
label.set_fontsize(size)
label.set_rotation('vertical')
の場合、文字サイズとティックラベルの向きが変更されます。
ただし、試しに
label.set_text('Foo')
ティックラベルは ではない を修正しました。また、もし私が
print label.get_text()
は何も出力されません。
ここで、さらに不思議なことがあります。これを試したところ
from pylab import *
axes = figure().add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
axes.plot(t, s)
for ticklabel in axes.get_xticklabels():
print ticklabel.get_text()
空の文字列だけが出力されますが、プロットには '0.0', '0.5', '1.0', '1.5', '2.0' とラベル付けされた目盛りが含まれます。
どのように解決するのですか?
注意: ticklabels が既に文字列に設定されていない限り (例えば boxplot では通常そうです)、これは
1.1.0
. 現在のgithubマスターから作業している場合、これはうまくいきません。 何が問題なのか、まだよくわかりません...。 意図しない変更かもしれないし、そうでないかもしれない...。
普通なら、このようなことをするはずです。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# We need to draw the canvas, otherwise the labels won't be positioned and
# won't have values yet.
fig.canvas.draw()
labels = [item.get_text() for item in ax.get_xticklabels()]
labels[1] = 'Testing'
ax.set_xticklabels(labels)
plt.show()
<イグ
なぜこれほど多くの輪を飛び越える必要があるのかを理解するためには、matplotlib がどのような構造になっているのかをもう少し理解する必要があります。
Matplotlib は、明示的に指示されない限り、目盛りの位置決めなどを "static" することを意図的に避けています。 その前提は、プロットと対話したいので、プロットの境界、目盛り、目盛りラベルなどが動的に変化することです。
したがって、与えられた目盛りのラベルのテキストを設定するだけではダメなのです。 デフォルトでは、プロットが描画されるたびに、軸のロケータとフォーマッタによって再セットされます。
しかし、ロケータとフォーマッタが静的であるように設定されている場合 (
FixedLocator
と
FixedFormatter
それぞれ)であれば、ティックラベルは変わりません。
これは
set_*ticklabels
または
ax.*axis.set_ticklabels
が行います。
これで、個々のティックラベルを変更することがなぜ少し複雑なのか、少しはわかっていただけたでしょうか?
実際にやりたいことは、特定の位置に注釈をつけることだけであることがよくあります。 そのような場合は
annotate
の代わりに
関連
-
Python カメの描画コマンドとその例
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python 入出力と高次代入の基礎知識
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] matplotlib で x 軸または y 軸の "目盛り頻度" を変更する
-
[解決済み] matplotlib のプロットで軸のテキストを非表示にする
-
[解決済み] Matplotlibで目盛りラベルのフォントサイズを小さくする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
Pythonによるjieba分割ライブラリ
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない