在this之后,我知道可以使用以下方法提取xticks标签和位置:
import matplotlib.pyplot as plt
plt.scatter(x_data, y_data)
locs, labels=plt.xticks()
新变量labels
是matplotlib.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
中进行更改:
我试图切片:
labels[1:-1]
但是它返回:
Out[]: [Text(2,0,'2'), Text(4,0,'4'), Text(6,0,'6'), Text(8,0,'8')]
就我所能做到的。
我想不通一种方法来访问该属性并更改其值。
NB :我正在寻找一种访问这些属性并更改值的通用方法,我并不关心更改标签颜色的具体问题。这只是一个例子。
答案 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')