一尘不染

Python-修改刻度标签文本

python

我想对图中的几个选定的刻度线标签进行一些修改。

例如,如果我这样做:

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”的刻度。


阅读 1321

收藏
2020-02-17

共1个答案

一尘不染

警告:除非ticklabel已设置为字符串(例如在boxplot中通常是这种情况),否则这不适用于任何比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故意避免对刻度等进行“静态”定位,除非明确告知。假设你要与图进行交互,因此图的边界,刻度线,刻度标签等将动态变化。

因此,你不能只设置给定刻度标签的文本。默认情况下,每次绘制绘图时,都会通过轴的“定位器”和“格式化程序”将其重置。

但是,如果将“定位器”和“格式化程序”设置为静态(分别为FixedLocatorFixedFormatter),则刻度线标签保持不变。

这是什么set_*ticklabelsax.*axis.set_ticklabels做。

希望这可以使我们更加清楚地知道为什么更改单个刻度标签有些麻烦。

通常,你实际要做的只是注释特定位置。在这种情况下,请查看annotate

2020-02-17