6

我现在只使用 Python 大约一个月,所以如果有一些我忽略的简单解决方案,我很抱歉。

基本上我有一个带有 4 个子图的图形,左侧的 2 个显示纵向图,右侧的 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 中继续对其进行测试。

我还想更改纵向图中当前突出显示的刻度标签(仅 xgridlines 可见)的网格线颜色,是否有某种类似的方法?我已经在互联网上搜索了大约 2 个小时的解决方案,并没有真正找到任何有用的东西。

我认为可能会使用类似的东西ax1.get_xgridlines(),但我不知道如何将其转换为有用的列表。

谢谢,塔玛拉

4

2 回答 2

15

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)

在此处输入图像描述

于 2015-08-18T17:02:19.987 回答
2

由于上述解决方案仅适用于主要网格线(因为 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])
于 2018-10-03T09:15:36.483 回答