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()

什么都没有打印出来。

这里还有一些奇怪的地方。当我尝试这个时:

import matplotlib.pyplot as plt
import numpy as np

axes = plt.figure().add_subplot(111)
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.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 更新的任何 matplotlib 版本。如果你在当前的 github master 上工作,这是行不通的。我还不确定问题出在哪里...可能是意外更改,也可能不是...

通常,您会按照以下方式做一些事情:

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 重新设置。

但是,如果 Locators 和 Formatter 设置为静态(分别为 FixedLocatorFixedFormatter),则刻度标签保持不变。

这就是 set_*ticklabelsax.*axis.set_ticklabels 的作用。

希望这可以更清楚地说明为什么更改单个刻度标签有点复杂。

通常,您真正想要做的只是注释某个位置。在这种情况下,请改为查看 annotate

https://stackoverflow.com/questions/11244514/

相关文章:

linux - 释放 TCP/IP 端口?

python - 如何打开一个文件进行读写?

linux - 如何从远程 SSH session 将数据发送到本地剪贴板

python - 如何创建一个全部为 True 或全部为 False 的 numpy 数组?

python - 如何在 Python 中获取已排序数组的索引

python - Virtualenvs 中损坏的引用

linux - Bash:无限 sleep (无限阻塞)

linux - Linux 环境变量名称中允许的字符

c - 如何在 C 中从串口打开、读取和写入?

python - 如何避免 __init__ 中的 "self.x = x; self.y = y;