Ярлыки xpks Matplotlib: как изменить значение атрибутов - PullRequest
1 голос
/ 27 марта 2019

После это Я знаю, что могу извлечь метки и позиции 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:

here

Я попытался нарезать его:

labels[1:-1]

Но он возвращает:

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

и это так далеко, как мне удалось пройти.
Я не мог найти способ доступа к атрибуту и ​​изменить его значение.

NB : я ищу общий способ доступа к этим атрибутам и изменения значения, я делаюне заботиться об изменении цвета меток специально.Это всего лишь пример.

1 Ответ

2 голосов
/ 27 марта 2019

Вас может заинтересовать альтернативное решение, в котором вы можете выбрать, какие именно галочки вы хотите раскрасить.Здесь я должен выполнить цикл с [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

...