簡體   English   中英

Matplotlib:更改單個網格線的顏色

[英]Matplotlib: Change color of individual grid lines

我現在只使用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中測試它。

我還想在縱向圖中更改當前突出顯示的刻度標簽的網格線顏色(只有xgridlines可見),是否有某種類似的方法可以做到這一點? 我現在在互聯網上搜索了大約2個小時的解決方案,並沒有找到任何有用的東西。

我認為可能會使用像ax1.get_xgridlines()這樣的東西,但我不知道如何將其轉換為有用的列表。

謝謝,塔瑪拉

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM