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

时间:2019-03-27 13:50:19

标签: python matplotlib axis-labels

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

import matplotlib.pyplot as plt

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

新变量labelsmatplotlib.cbook.silent_list,其中 不像普通列表那样 是否可以访问和修改labels元素的任何属性值?
具体来说,我想知道是否可以选择标签的一个子集(即,切片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中进行更改:

here

我试图切片:

labels[1:-1]

但是它返回:

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

就我所能做到的。
我想不通一种方法来访问该属性并更改其值。

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

1 个答案:

答案 0 :(得分:2)

您可能对替代解决方案感兴趣,在该解决方案中,您可以选择要着色的特定刻度。在这里,我必须从[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')

enter image description here