2011-06-17 219 views
169

在matplotlib圖中,如何使用ax1.set_xticklabels()更小的刻度標籤的字體大小?Matplotlib使刻度標籤的字體大小更小

此外,如何將它從水平轉動到垂直?

+0

由於因爲問這個問題,我現在正在努力解決這個問題。我在這裏沒有強烈的意見,但看起來像選民認爲最好的答案不是公認的答案。你怎麼看? –

+0

我是否正確閱讀了至少有5種不同的方法來更改matplotlib中的字體大小? :D – famargar

回答

71

請注意,較新版本的MPL具有此任務的快捷方式。在此問題的其他答案中顯示了一個示例:https://stackoverflow.com/a/11386056/42346

下面的代碼僅用於說明目的,可能未必會進行優化。

import matplotlib.pyplot as plt 
import numpy as np 

def xticklabels_example(): 
    fig = plt.figure() 

    x = np.arange(20) 
    y1 = np.cos(x) 
    y2 = (x**2) 
    y3 = (x**3) 
    yn = (y1,y2,y3) 
    COLORS = ('b','g','k') 

    for i,y in enumerate(yn): 
     ax = fig.add_subplot(len(yn),1,i+1) 

     ax.plot(x, y, ls='solid', color=COLORS[i]) 

     if i != len(yn) - 1: 
      # all but last 
      ax.set_xticklabels(()) 
     else: 
      for tick in ax.xaxis.get_major_ticks(): 
       tick.label.set_fontsize(14) 
       # specify integer or one of preset strings, e.g. 
       #tick.label.set_fontsize('x-small') 
       tick.label.set_rotation('vertical') 

    fig.suptitle('Matplotlib xticklabels Example') 
    plt.show() 

if __name__ == '__main__': 
    xticklabels_example() 

enter image description here

+53

正如一邊:不用循環瀏覽刻度標籤對象,你可以使用'plt.setp'。 (另外,看看'ax.tick_params')例如,你可以'plt.setp(ax.get_xticklabels(),rotation ='vertical',fontsize = 14)''。此外,軸對象有一個'ax.is_last_row()'方法,可以在你的例子中很方便。而不是'如果我!= len ...',你可以做'如果不是ax.is_last_row()'。 (爲什麼它是一種方法,我沒有線索...... Matplotlib討厭屬性,顯然!) –

+0

@Joe:這是我第一次聽說'is_last_row()',謝謝!過去我使用過'plt.setp',並不一定能確定它代表了更加規範的定製刻度標籤的方式。你已經消除了這種懷疑,謝謝。更廣泛地說:你的回答,特別是在'matplotlib'標籤中,經常讓我敬畏。保持偉大的工作。 – bernie

+0

謝謝!我很欣賞客氣的話,特別是來自你的!在這種情況下,Canonical是非常相對的。 'plt.setp'是一個「matlab-ism」,顯式循環可能更加pythonic。作爲一個matlab轉換,我自己,'setp'感覺自然,但每個人都是自己的。任何一個都很可讀,i.m.o. –

304

居然還有一個更簡單的方法。我剛剛發現:

import matplotlib.pyplot as plt 
# We prepare the plot 
fig = plt.figure(1) 
# We define a fake subplot that is in fact only the plot. 
plot = fig.add_subplot(111) 

# We change the fontsize of minor ticks label 
plot.tick_params(axis='both', which='major', labelsize=10) 
plot.tick_params(axis='both', which='minor', labelsize=8) 

這隻能回答你的問題label部分的大小雖然。

13

您還可以更改像字號標籤顯示的參數有這樣一行:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()] 
37

或者,你可以這樣做:

import matplotlib as mpl 
label_size = 8 
mpl.rcParams['xtick.labelsize'] = label_size 
15

在Matplotlib的當前版本,你可以做axis.set_xticklabels(labels, fontsize='small')

10

對於較小的字體,我用

ax1.set_xticklabels(xticklabels,字體大小= 7)

和它的作品!

52

要指定在同一時間都字體大小和旋轉,嘗試:

plt.xticks(fontsize=14, rotation=90) 
+3

這是最好也是最簡單的答案。 – user1271772

4

plt.tick_params(軸= '兩者',這= '次要',labelsize = 12)

+0

如果您想更改字體大小而不設置新標籤,這是唯一可行的答案。 –

相關問題