2011-06-17 180 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

如果您想更改字体大小而不设置新标签,这是唯一可行的答案。 –

相关问题