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

Matplotlib xticks labels: how to modify attributes value

关注 this 我知道我可以使用以下方法提取 xticks 标签和位置:

import matplotlib.pyplot as plt

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

新变量labels是一个matplotlib.cbook.silent_list,它 不像普通列表。 有没有办法访问和修改 labels 元素的任何属性值?
具体来说,我想知道我是否可以 select 标签的一个子集(即切片 silent_list)并修改该子集的特定属性。

这是一个玩具示例:

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:

我试着切了它:

labels[1:-1]

但是 returns:

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

这是我所能做到的。
我想不出访问属性和更改其值的方法。

NB:我正在寻找访问这些属性和更改值的通用方法,我不关心具体更改标签颜色。这只是一个例子。

您可能对替代解决方案感兴趣,您可以在其中选择要为哪些特定刻度着色。在这里,我必须从 [1:-1] 开始循环,因为第一个和最后一个刻度没有出现在此处的图表上,但它们出现在 labels

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