修改滴答标签文本
我想对图中的几个选定的刻度标签进行一些修改。
例如,如果我这样做:
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()
只打印空string,但情节包含标记为“0.0”,“0.5”,“1.0”,“1.5”和“2.0”的刻度。
警告:除非已经将tick标记设置为string(如boxplot中通常的情况),否则对于任何新版本的matplotlib都不适用。 如果你是从目前的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会故意避免对ticks等进行“静态”定位。 假设你想要和情节进行交互,所以情节的边界,虱子,标签等等将会dynamic地改变。
因此,您不能只设置给定刻度标签的文本。 默认情况下,每当绘制图时,都由轴的定位器和格式器重新设置。
但是,如果Locators和Formatter设置为静态(分别为FixedLocator
和FixedFormatter
),则刻度标签保持不变。
这是set_*ticklabels
或ax.*axis.set_ticklabels
所做的。
希望这能让我们更清楚地知道为什么改变一个单独的刻度标签有点复杂。
通常,你真正想要做的只是注释某个位置。 在这种情况下,请查看annotate
。
在更新版本的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
版本。
也可以用pylab和xticks来做到这一点
import pylab as plt x = [0,1,2] y = [90,40,65] labels = ['high', 'low', 37337] plt.plot(x,y, 'r') plt.xticks(x, labels, rotation='vertical') plt.show()
http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html
轴类有一个set_yticklabels函数,它允许你设置刻度标签,如下所示:
#ax is the axes instance group_labels = ['control', 'cold treatment', 'hot treatment', 'another treatment', 'the last one'] ax.set_xticklabels(group_labels)
我仍然在为什么你的上面的例子没有工作。
这工作:
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)
你可以做:
for k in ax.get_xmajorticklabels(): if some-condition: k.set_color(any_colour_you_like) draw()