在 matplotlib 图中,如何使使用 ax1.set_xticklabels()
的刻度标签的字体大小更小?
此外,如何将其从水平旋转到垂直?
其实还有更简单的方法。我刚刚发现:
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
部分的大小。
要同时指定字体大小和旋转,试试这个:
plt.xticks(fontsize=14, rotation=90)
请注意,较新版本的 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 讨厌属性!)
is_last_row()
,谢谢!我过去使用过 plt.setp
,但不确定它是否代表了一种更规范的自定义刻度标签的方式。你已经消除了这个疑问,谢谢。更广泛地说:您的回答,尤其是在 matplotlib
标记中的回答,经常让我敬畏。继续伟大的工作。
plt.setp
是一个“matlab 主义”,一个显式循环可能更像是 Python 的。作为一个 matlab 转换者,我自己 setp
感觉很自然,但对每个人来说都是他们自己的。任何一个都非常可读,imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
而不是 get_major_ticks
或者,您可以这样做:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
另一种选择
我有两个并排的图,想分别调整刻度标签。
上述解决方案很接近,但它们不适合我。我从这个 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)
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
在当前版本的 Matplotlib 中,您可以执行 axis.set_xticklabels(labels, fontsize='small')
。
labels
。如果我们可以只改变字体大小就更好了。
对于较小的字体,我使用
ax1.set_xticklabels(xticklabels, fontsize=7)
它有效!
您还可以使用如下行更改标签显示参数,例如字体大小:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
以下对我有用:
ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)
上述的优点是您不需要提供 labels
的 array
并使用 axes
上的任何数据。
axis = 'x'
或axis = 'y'
仅修改一个轴