270

プロットで選択したいくつかの目盛りラベルを変更したいと考えています。

たとえば、次のようにします。

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' とラベル付けされた目盛りが含まれます。

4

11 に答える 11

361

警告: ticklabels が既に文字列に設定されていない限り (通常、boxplot などでよくあることです)、これは .NET より新しいバージョンの matplotlib では機能しません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 は、明示的に指示されない限り、ティックなどの「静的な」配置を意図的に回避します。プロットを操作する必要があるため、プロット、目盛り、目盛りラベルなどの境界が動的に変化することが前提です。

したがって、特定の目盛りラベルのテキストを設定することはできません。デフォルトでは、プロットが描画されるたびに、軸の Locator と Formatter によって再設定されます。

ただし、ロケーターとフォーマッターが静的 (それぞれFixedLocatorFixedFormatter) に設定されている場合、目盛りラベルは同じままです。

これは何set_*ticklabelsですかax.*axis.set_ticklabels

これで、個々の目盛りラベルを変更するのが少し複雑な理由が少し明確になることを願っています。

多くの場合、実際にやりたいことは、特定の位置に注釈を付けることです。その場合はannotate、代わりに を調べてください。

于 2012-06-28T18:37:34.550 に答える
110

の新しいバージョンでは、一連の値でmatplotlib目盛りラベルを設定しない場合、デフォルトで設定されます (プロットが描画されるとき、ラベルは単に目盛り値になります)。それを知っていると、目的の出力を得るには、次のようなものが必要になります。str''

>>> from pylab import *
>>> axes = figure().add_subplot(111)
>>> a=axes.get_xticks().tolist()
>>> a[1]='change'
>>> axes.set_xticklabels(a)
[<matplotlib.text.Text object at 0x539aa50>, <matplotlib.text.Text object at 0x53a0c90>, 
<matplotlib.text.Text object at 0x53a73d0>, <matplotlib.text.Text object at 0x53a7a50>, 
<matplotlib.text.Text object at 0x53aa110>, <matplotlib.text.Text object at 0x53aa790>]
>>> plt.show()

そして結果: ここに画像の説明を入力

をチェックすると_xticklabels、それらはもはや の束ではありません''

>>> [item.get_text() for item in axes.get_xticklabels()]
['0.0', 'change', '1.0', '1.5', '2.0']

1.1.1rc1から現在のバージョンまでのバージョンで動作します2.0

于 2013-09-22T16:32:56.447 に答える
15

これは機能します:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots(1,1)

x1 = [0,1,2,3]
squad = ['Fultz','Embiid','Dario','Simmons']

ax1.set_xticks(x1)
ax1.set_xticklabels(squad, minor=False, rotation=45)

連邦政府

于 2017-07-04T03:50:44.573 に答える
12

axisクラスにはset_yticklabels関数があり、次のように目盛りラベルを設定できます。

#ax is the axes instance
group_labels = ['control', 'cold treatment',
             'hot treatment', 'another treatment',
             'the last one']

ax.set_xticklabels(group_labels)

上記の例が機能しなかった理由については、まだ作業中です。

于 2012-06-28T13:00:58.643 に答える
-4

できるよ:

for k in ax.get_xmajorticklabels():
    if some-condition:
        k.set_color(any_colour_you_like)

draw()
于 2013-04-12T14:27:05.757 に答える