ChatGPT解决这个技术问题 Extra ChatGPT

Matplotlib 使刻度标签字体变小

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

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

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

A
Autiwa

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

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' 仅修改一个轴
s
scottlittle

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

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

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

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

https://i.stack.imgur.com/lRp5U.png


顺便说一句:您可以使用 plt.setp,而不是遍历刻度标签对象。 (另外,看看 ax.tick_params)例如,您可以只执行 plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)。此外,轴对象有一个 ax.is_last_row() 方法,在您的示例这样的情况下可以很方便。您可以使用 if not ax.is_last_row() 代替 if i != len...。 (为什么它是一种方法,我不知道......显然,Matplotlib 讨厌属性!)
@Joe:这是我第一次听说 is_last_row(),谢谢!我过去使用过 plt.setp,但不确定它是否代表了一种更规范的自定义刻度标签的方式。你已经消除了这个疑问,谢谢。更广泛地说:您的回答,尤其是在 matplotlib 标记中的回答,经常让我敬畏。继续伟大的工作。
谢谢!!我很感激你的客气话,尤其是你的!在这种情况下,Canonical 是非常相对的。 plt.setp 是一个“matlab 主义”,一个显式循环可能更像是 Python 的。作为一个 matlab 转换者,我自己 setp 感觉很自然,但对每个人来说都是他们自己的。任何一个都非常可读,imo
在新版本中,我发现您必须使用 labelsize 参数:例如 ax.tick_params(axis='x', labelsize=8)
应该是 get_ticklabels 而不是 get_major_ticks
u
user2468932

或者,您可以这样做:

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

K
Kyle Swanson

另一种选择

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

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

ax.xaxis.set_tick_params(labelsize=20)

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

IE

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)

一个小小的微妙之处......我知道......但我希望这可以帮助某人:)

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

https://i.stack.imgur.com/oEaEn.png


试试这个:ax.yaxis.offsetText.set_fontsize(18)
G
Georgy
plt.tick_params(axis='both', which='minor', labelsize=12)

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

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


这也迫使您指定 labels。如果我们可以只改变字体大小就更好了。
L
Little Bobby Tables

对于较小的字体,我使用

ax1.set_xticklabels(xticklabels, fontsize=7)

它有效!


你如何定义 xticklabels?
@mLstudent33 这只是一个标签列表..可以是任何东西
A
ATX_Bigfoot

您还可以使用如下行更改标签显示参数,例如字体大小:

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

我认为使用具有副作用的列表推导并不是最佳做法。我建议改用标准 for 循环。
R
Rohit Poudel

以下对我有用:

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

上述的优点是您不需要提供 labelsarray 并使用 axes 上的任何数据。