在matplotlib图中,如何使用ax1.set_xticklabels()缩小刻度标签的字体大小?

评论

感谢您提出这个问题,我正在尝试解决这个问题。我在这里的观点不强,但看起来选民认为最好的答案不是公认的答案。你觉得呢?

我是否正确地阅读到至少有5种不同的方法来更改matplotlib中的字体大小? :D

#1 楼

请注意,较新版本的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()




评论


顺便说一句:您可以使用plt.setp来代替遍历刻度标签对象。 (另外,请看ax.tick_params)例如,您可以执行plt.setp(ax.get_xticklabels(),rotation ='vertical',fontsize = 14)。另外,axes对象具有ax.is_last_row()方法,在您的示例中,这种方法很方便。如果不是ax.is_last_row(),则可以执行i!= len...。 (为什么是一种方法,我不知道... Matplotlib显然讨厌属性!)

–乔·肯顿(Joe Kington)
2011年6月18日在2:11

@Joe:这是我第一次听说is_last_row(),谢谢!我过去使用过plt.setp,并不一定要确定它代表了自定义刻度标签的更规范的方式。谢谢,您已经消除了疑问。更广泛地说:您的答案(尤其是在matplotlib标记中)经常使我感到敬畏。继续努力。

–mechanical_meat
2011年6月18日,下午2:51

谢谢!!我感谢您的客气话,尤其是您的来信!在这种情况下,规范是相对的。 plt.setp是一种“ matlab主义”,而显式循环可能更pythonic。作为一个matlab转换者,我自己,setp感觉很自然,但对每个人来说都是如此。任一种都是可读性强的。

–乔·肯顿(Joe Kington)
2011年6月18日,下午3:36

在新版本中,我发现您必须使用labelsize参数: ax.tick_params(axis ='x',标签大小= 8)

– Vladtn
2012年2月16日20:49



应该是get_ticklabels而不是get_major_ticks

– Jez
15年6月15日在10:25

#2 楼

实际上有一种更简单的方法。我刚刚发现:

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

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


这仅回答了问题中label部分的大小。

评论


使用axis ='x'或axis ='y'仅修改其中一个轴

–耶稣的喜爱
20-04-28在15:08

#3 楼

要同时指定字体大小和旋转大小,请尝试以下操作:

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


评论


请注意,在使用类似MATLAB的pyplot接口时会使用它。如果是面向对象的接口,则应使用轴对象的tick_params()方法或轴对象的set_tick_params()方法(请参见其他答案)。

–wombatonfire
18年7月20日在17:45

#4 楼

另外,您也可以执行以下操作:

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


#5 楼

plt.tick_params(axis='both', which='minor', labelsize=12)


评论


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

–David Stansby
17年9月20日在9:20

@DavidStansby我不相信这是真的。我遇到了这个确切的问题(上面已提到),并且能够使用不同于该解决方案的替代方法。使用ax.xaxis.set_tick_params(labelsize = 20)

–凯尔·斯旺森(Kyle Swanson)
18-10-15在22:47



最简单的答案,不需要引用斧头对象

–jeremy_rutman
19年7月6日在8:54

#6 楼

另一个替代方法

我有两个并排图,并且想分别调整刻度线标签。

以上解决方案很接近,但对我来说却不可行。我从此matplotlib页面中找到了解决方案。对于我的用例,需要调整的是右边的图。对于自从创建新的刻度标签以来的左侧图,我可以在设置标签的相同过程中调整字体。

ie

ax.xaxis.set_tick_params(labelsize=20)


因此我使用了正确的绘图,

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)


细微之处...我知道...但我希望这对某人有帮助:) br />
如果有人知道如何调整数量级标签的字体大小,则奖励点。



#7 楼

在当前版本的Matplotlib中,您可以执行axis.set_xticklabels(labels, fontsize='small')

评论


这也迫使您指定标签。最好只更改字体大小。

– Guimoute
19年11月20日在13:47

#8 楼

您还可以使用如下一行更改标签显示参数,例如fontsize:

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


评论


我认为使用具有副作用的列表理解不是最佳实践。我建议改用标准的for循环。

– jjmontes
19年7月31日在17:59



#9 楼

对于较小的字体,我使用

ax1.set_xticklabels(xticklabels, fontsize=7)

,它可以工作!

评论


您如何定义xticklabels?

–mLstudent33
20-2-20在19:21

#10 楼

以下内容对我有用: />