Matplotlib 使刻度标签字体变小

Posted

技术标签:

【中文标题】Matplotlib 使刻度标签字体变小【英文标题】:Matplotlib make tick labels font size smaller 【发布时间】:2011-09-17 10:30:12 【问题描述】:

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

此外,如何将其从水平旋转到垂直?

【问题讨论】:

感谢您提出这个问题,我正在努力解决这个问题。我在这里没有强烈的意见,但看起来选民认为最好的答案不是被接受的答案。你怎么看? 我是否正确阅读到至少有 5 种不同的方法可以更改 matplotlib 中的字体大小? :D 【参考方案1】:

其实有一个更简单的方法。我刚刚发现:

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' 只修改一个轴【参考方案2】:

要同时指定字体大小和旋转,试试这个:

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

【讨论】:

请注意,这是在使用类似 MATLAB 的 pyplot 接口时使用的。如果是面向对象的接口,则应使用轴对象的 tick_params() 方法或轴对象的 set_tick_params() 方法(请参阅其他答案)。【参考方案3】:

请注意,较新版本的 MPL 具有此任务的快捷方式。此问题的另一个答案中显示了一个示例:https://***.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)。此外,轴对象有一个 ax.is_last_row() 方法,在像您的示例这样的情况下可以很方便。代替if i != len...,您可以使用if not ax.is_last_row()。 (为什么它是一种方法,我不知道...... Matplotlib 显然讨厌属性!) @Joe:这是我第一次听说is_last_row(),谢谢!我过去使用过plt.setp,但不一定确定它代表了一种更规范的自定义刻度标签的方式。你已经消除了这个疑问,谢谢。更广泛地说:你的回答,尤其是在matplotlib 标签中,经常让我敬畏。继续努力。 谢谢!!我很感激你的客气话,尤其是你的!在这种情况下,Canonical 是非常相对的。 plt.setp 是一个“matlab 主义”,一个显式循环可能更像是 pythonic。作为一个 matlab 转换者,我自己,setp 感觉很自然,但对每个人来说都是他们自己的。任何一个都非常可读,i.m.o. 在新版本中我发现你必须使用 labelsize 参数:例如ax.tick_params(axis='x', labelsize=8) 应该是get_ticklabels 而不是get_major_ticks【参考方案4】:

或者,您可以这样做:

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

【讨论】:

【参考方案5】:

另一种选择

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

上述解决方案很接近,但它们不适合我。我从这个 matplotlib page 找到了我的解决方案。

ax.xaxis.set_tick_params(labelsize=20)

这成功了,而且直截了当。对于我的用例,需要调整的是右侧的图。对于左侧的图,因为我正在创建新的刻度标签,所以我能够在与 设置标签相同的过程中调整字体。

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

因此我使用了正确的情节,

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

一个小细节......我知道......但我希望这对某人有帮助:)

如果有人知道如何调整数量级标签的字体大小,则可以加分。

【讨论】:

试试这个:ax.yaxis.offsetText.set_fontsize(18)【参考方案6】:
plt.tick_params(axis='both', which='minor', labelsize=12)

【讨论】:

如果您想在不设置新标签的情况下更改字体大小,这是唯一可行的答案。 @DavidStansby 我不相信这是真的。我遇到了这个确切的问题(上面提到过)并且能够使用与此解决方案不同的替代方法。使用ax.xaxis.set_tick_params(labelsize=20) 最简单的答案,不需要参考 ax 对象 我认为你想要 ax 对象..但每个人都有自己的【参考方案7】:

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

【讨论】:

这也迫使您指定labels。如果我们可以只改变字体大小就更好了。【参考方案8】:

对于较小的字体,我使用

ax1.set_xticklabels(xticklabels, fontsize=7)

它有效!

【讨论】:

如何定义 xticklabels? @mLstudent33 这只是一个标签列表......真的可以是任何东西【参考方案9】:

你也可以用这样的一行来改变字体大小等标签显示参数:

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

【讨论】:

我认为使用具有副作用的列表推导并不是最佳做法。我建议改用标准 for 循环。【参考方案10】:

以下内容对我有用:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

上述的好处是您不需要提供arraylabels 并且可以处理axes 上的任何数据。

【讨论】:

以上是关于Matplotlib 使刻度标签字体变小的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib绘制图表,设置刻度标签最大最小刻度字体大小,label位置刻度轴箭头等

如何更改 Matplotlib 中颜色条刻度标签的字体大小?

python使用matplotlib可视化自定义设置轴刻度标签字体的大小( setting axis ticks size in matplotlib)

python使用matplotlib可视化自定义设置X轴刻度标签字体的大小( setting axis ticks size in matplotlib x axis)

如何使用matplotlib使绘图的xtick标签成为简单的图形?

matplotlib 中轴标签文本顶部的位置是啥?