Matplotlib xticks标签:如何修改属性值

3

根据此链接的说明,我可以使用以下方法提取xticks标签和位置:

import matplotlib.pyplot as plt

plt.scatter(x_data, y_data)
locs, labels=plt.xticks()

新的变量labels是一个matplotlib.cbook.silent_list,它不像普通列表一样运作。是否有方法可以访问和修改labels元素的任何属性值?
具体来说,我想知道是否可以选择标签的子集(即切片无声列表)并修改该子集的特定属性。
以下是一个玩具示例:
import numpy as np
import matplotlib.pyplot as plt

x=np.array([1,2,3,4,5,6,7,8])
y=np.random.normal(0, 1, (8, 1))
plt.scatter(x, y)
locs, labels=plt.xticks()    

作为一个例子,假设我想将所有`labels`的标签颜色更改为红色,除了第一个和最后一个元素。如果我打开变量中的一个元素,我会看到有一个名为 `_color` 的属性,其值为 `k`,我想将其更改为 `r`:
here
我尝试进行切片:
labels[1:-1]

但它返回:

Out[]: [Text(2,0,'2'), Text(4,0,'4'), Text(6,0,'6'), Text(8,0,'8')]

而这就是我想到的最远的地方。 我无法找到一种方法来访问属性并更改其值。

NB: 我正在寻找一种通用的方法来访问这些属性并更改它们的值,我不关心特定地改变标签的颜色。那只是一个例子。


2
plt.setp(labels[2:-2], color="red") (注意这里的2,因为一个标签在坐标轴之外) - ImportanceOfBeingErnest
这里就是你需要的。关键在于使用fig.canvas.draw(),然后再使用get_text() - Sheldore
可能是修改刻度标签文本的重复问题。 - Sheldore
@Bazingaa 不是的,我特别想知道如何访问该对象的属性。这比仅仅更改文本要广泛得多,并且它允许我在标签上做很多事情。 - CAPSLOCK
我现在正在尝试概括它 =)。我相信它可以做到。 - CAPSLOCK
显示剩余6条评论
1个回答

2
你可能对一种替代方案感兴趣,可以选择要着色的特定刻度。在这里,我必须从[1:-1]循环,因为第一个和最后一个刻度不会出现在图表上,但它们出现在labels中。"Original Answer"翻译成"最初的回答"。
import numpy as np; np.random.seed(134)
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x=np.array([1,2,3,4,5,6,7,8])
y=np.random.normal(0, 1, (8, 1))
plt.scatter(x, y)

fig.canvas.draw()
xticks = ax.get_xticklabels()

target_ticks = [1, 3, 6, len(xticks)-2]

for i, lab in enumerate(xticks[1:-1]):
    if i+1 in target_ticks:
        lab.set_color('r')

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接