【问题标题】:Matplotlib: Change color of individual grid linesMatplotlib:更改单个网格线的颜色
【发布时间】:2015-08-18 13:18:59
【问题描述】:

我现在才使用 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() 之类的东西,但我不知道如何将其转换为有用的列表。

谢谢, 塔玛拉

【问题讨论】:

    标签: python matplotlib plot gridlines


    【解决方案1】:

    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_xgridlines() 似乎只返回主网格)
    • 如果我只想为网格线的一部分着色(比如上图中的 0.3 到 0.5)怎么办?
    【解决方案2】:

    因为上述解决方案仅适用于主要网格线 (因为 get_gridlines() 目前被硬编码为仅使用主要的), 以下是您还可以通过调整访问次要网格线的方法 get_gridlines() 函数(from here):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2018-10-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多