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

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

谢谢你问这个问题,我正在努力解决这个问题。我在这里不是很固执己见,但看起来选民认为最好的答案不是公认的答案。你怎么认为?

我是否正确地理解了至少有5种不同的方法可以改变matplotlib中的字体大小?D

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

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.
ax = fig.add_subplot(111)
# 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)

注意,这是在使用类似于matlab的pyplot接口时使用的。对于面向对象的接口,应使用axis对象的tick_params()方法或axis对象的set_tick_params()方法(参见其他答案)。

请注意,较新版本的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,而不是循环遍历tick-label对象。(另外,看看ax.tick_params)例如,您可以只做plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)。此外,axes对象有一个ax.is_last_row()方法,在类似示例的情况下可以很方便地使用。你可以用if not ax.is_last_row()代替if i != len...。(为什么这是一种方法,我不知道……Matplotlib显然讨厌属性!)

@乔:这是我第一次听说江户十一〔六〕的事,谢谢!我在过去使用过plt.setp,不一定能确定它代表了定制记号标签的更规范的方法。你已经消除了疑虑,谢谢。更广泛地说:你的回答,尤其是在matplotlib标签上,常常让我敬畏。继续努力。

谢谢!!我很欣赏你的好话,尤其是你的好话!在这种情况下,canonical是非常相对的。plt.setp是一个"matlab ism",而显式循环可能更像是一个Python。作为一个matlab的转换者,我自己,setp感觉很自然,但对每个人都是自己的。任何一个都是可读的,I.M.O.

在新版本中,我发现您必须使用labelsize参数:例如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的当前版本中,可以执行axis.set_xticklabels(labels, fontsize='small')。

另一种选择

我有两个并排的绘图区,希望单独调整刻度线标签。

以上的解决方案都很接近,但它们并没有为我解决。我从这个Matplotlib页面找到了我的解决方案。

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)

一只小猎犬巧妙地…我知道。。。但我希望这能帮助别人:)

如果有人知道如何调整字体大小的数量级标签的奖励点。


对于较小的字体,我使用

ax1.set_xticklabels(xticklabels, fontsize=7)

它工作!

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

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

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

这是唯一一个在不设置新标签的情况下更改字体大小的答案。

@我不相信这是真的。我有这个确切的问题(如上所述),并且能够使用不同于此解决方案的替代方法。使用ax.xaxis.set_tick_params(labelsize=20)。

这已经在另一个答案中提到:stackoverflow.com/a/11386056/7851470

以下内容对我很有用:

ax2.xaxis.set_tick_params(labelsize=7)

ax2.yaxis.set_tick_params(labelsize=7)

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