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