修改勾号标签文本

2024-06-28 20:18:34 发布

您现在位置: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”的记号


Tags: text绘图get标签labelprintsetaxes
3条回答

也可以使用pylabxticks

import matplotlib
import matplotlib.pyplot 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()

https://matplotlib.org/stable/gallery/ticks_and_spines/ticklabels_rotation.html

在较新版本的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()

结果是: enter image description here

现在如果你检查_xticklabels,它们不再是一群''

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

它在从1.1.1rc1到当前版本2.0的版本中工作

警告:除非ticklabels已设置为字符串(如方框图中通常的情况),否则这将不适用于任何比1.1.0更新的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()

enter image description here

要理解为什么需要跨越这么多障碍,需要进一步了解matplotlib的结构

Matplotlib故意避免对记号等进行“静态”定位,除非明确要求这样做。假设您希望与绘图交互,因此绘图的边界、记号、标签等将动态更改

因此,不能只设置给定记号标签的文本。默认情况下,每次绘制绘图时,轴的定位器和格式设置程序都会重新设置它

但是,如果定位器和格式化程序设置为静态(FixedLocatorFixedFormatter),则记号标签保持不变

这就是set_*ticklabelsax.*axis.set_ticklabels所做的

希望这能让我们更清楚地了解为什么更改单个蜱虫标签有点复杂

通常,你真正想做的只是注释一个特定的位置。在这种情况下,请查看annotate

相关问题 更多 >