Matplotlib: изменить цвет отдельных линий сетки

Я использую Python только около месяца, поэтому извините, если есть какое-то простое решение, которое я упустил.

В основном у меня есть фигура с 4-мя участками, 2 слева показывают продольные графики, а справа - диаграммы рассеяния в определенных точках продольных графиков. Вы можете щелкнуть по точкам рассеяния в разных точках продольного графика с помощью кнопок, и метка метки продольного графика, на котором вы находитесь в данный момент, будет выделена синим цветом.

Окраска определенной метки галочки уже работает с этим:

xlabels = []
labelcolors = []

for i, item in enumerate(mr.segmentlst):
    if re.search('SFX|MC|MQ|MS|MKC', item):
        xlabels.append(mr.segmentlst[i])
    else:
        xlabels.append('')

for i, item in enumerate(mr.segmentlst):
    if re.search('SFX', item):
        labelcolors.append('black')
    else:
        labelcolors.append('gray')

labelcolors[self.ind]='blue'      

[t.set_color(i) for (i,t) in zip(labelcolors, ax1.xaxis.get_ticklabels())]
[t.set_color(i) for (i,t) in zip(labelcolors, ax2.xaxis.get_ticklabels())]

Он показывает только некоторые метки и соответственно меняет их цвет (я не знаю, есть ли другое решение для этого, это единственное, что я смог найти). Не берите в голову mr.segmentlist, я в настоящее время жестко запрограммировал график, чтобы использовать атрибут из другого метода, чтобы я мог легко продолжать тестировать его в Spyder.

Я также хотел бы изменить цвет линии сетки выделенной в данный момент метки (видны только линии xgrid) на продольных графиках, есть ли какой-то подобный способ сделать это? Я искал решение в Интернете около 2 часов и не нашел ничего полезного.

Я думал что-то вроде ax1.get_xgridlines() может быть использован, но я понятия не имею, как я мог бы превратить его в полезный список.

Спасибо Тамара

2 ответа

Решение

get_xgridlines() возвращает список объектов Line2D, поэтому, если вы можете найти, какую строку вы хотите изменить, вы можете изменить любое из их свойств

x = np.random.random_sample((10,))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x,x)
ax.grid()
a = ax.get_xgridlines()
b = a[2]
b.set_color('red')
b.set_linewidth(3)

Так как вышеупомянутое решение работает только с основными линиями сетки (поскольку get_gridlines() в настоящее время жестко задано для использования только основных линий), вот как вы можете также получить доступ к второстепенным линиям сетки, адаптируя функцию get_gridlines() (отсюда):

from matplotlib import cbook
def get_gridlines(ax, which):
        '''
        Parameters: 
            ax : ax.xaxis or ax.yaxis instance

            which : 'major' or 'minor'
        Returns:
            The grid lines as a list of Line2D instance    

        '''

        if which == 'major':
            ticks = ax.get_major_ticks()
        if which == 'minor':
            ticks = ax.get_minor_ticks()

        return cbook.silent_list('Line2D gridline',
                                 [tick.gridline for tick in ticks])
Другие вопросы по тегам