2015-09-22 185 views
1

我想編寫一個函數來改變我傳遞給它的圖中所有標籤的字體,而不實際更改標籤本身。Matplotlib:設置沒有設置標籤的標籤字體

這對於我已經創建並需要統一字體樣式的圖形非常有用。

目前我使用多種字體庫,像這樣:

titleFont = {'family' : 'Arial', 
      'weight' : 'bold', 
      'size' : 20} 
axesFont = {'family' : 'Arial', 
      'weight' : 'bold', 
      'size' : 18} 
axesTickFont = {'family' : 'Arial', 
       'weight' : 'bold', 
       'size' : 16}` 

,然後使用命令沿線的設置字體大小:

ax.set_title('My Plot',**titleFont) 

的問題是,與上面的命令,我需要指定一個情節標題,當我想要做的是設置現有標題的字體樣式。

像這樣的理想:

def set_fonts(axis): 
    axis.set_title(**titleFont) 
    axis.set_ylabel(**axesFont) 
    axis.set_xlabel(**axesFont) 
    return axis 

回答

1

這可能不是最乾淨的解決方案,但它應該做你想要什麼:

def set_fonts(axis): 
    axis.set_title(axis.get_title(), **titleFont) 
    axis.set_ylabel(axis.get_ylabel(), **axesFont) 
    axis.set_xlabel(axis.get_xlabel(), **axesFont) 
    return axis 

否則,您可以直接訪問相關的演出情況,它可以避免重新分配文本:

def set_fonts(axis): 
    plt.setp(axis.title, **titleFont) 
    plt.setp(axis.xaxis.label, **axesFont) 
    plt.setp(axis.yaxis.label, **axesFont) 
    return axis 
+0

Thanks @hitzg!這工作得很好。我無法實現第二個解決方案,因爲我不知道如何指向ticklabels對象。 axis.xaxis.ticklabels不起作用。你知道我在哪裏可以找到mpl對象的細節,以便從面向對象的角度更好地理解發生了什麼? – YoungPadawan

+1

要獲取ticklabel對象,可以使用'axis.get_xticklabels()'和'axis.get_yticklabels()'。我同意某些getter函數返回藝術家並且有些只是藝術家的一個屬性(例如,只返回文本而不是文本藝術家的'axis.get_xlabel()'),這有些不一致。 – hitzg

+0

並且用plt.setp方法,我怎樣才能訪問標籤? – YoungPadawan