我想对图中的一些选定刻度标签进行一些修改。
例如,如果我这样做:
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”的刻度。
警告:除非刻度标签已经设置为字符串(例如箱线图中通常是这种情况),否则这不适用于任何高于1.1.0. 如果你在当前的 github master 上工作,这是行不通的。我不确定问题出在哪里…可能是意外更改,也可能不是…
1.1.0
通常,您会按照以下方式做一些事情:
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 故意避免对刻度等进行“静态”定位,除非明确告知。假设您希望与绘图进行交互,因此绘图、刻度、刻度标签等的边界将动态变化。
因此,您不能只设置给定刻度标签的文本。默认情况下,每次绘制绘图时,它都会由轴的定位器和格式化程序重新设置。
但是,如果 Locators 和 Formatters 设置为静态(分别为FixedLocator和FixedFormatter),则刻度标签保持不变。
FixedLocator
FixedFormatter
这是做什么set_*ticklabels或做什么ax.*axis.set_ticklabels。
set_*ticklabels
ax.*axis.set_ticklabels
希望这可以更清楚地说明为什么更改单个刻度标签有点复杂。
通常,您真正想要做的只是注释某个位置。在这种情况下,请annotate改为查看 。
annotate