如何在matplotlib的python中自动调整文本大小?

8
我在matplotlib中有一个图表,我的问题是当调整窗口大小时,由于x轴的值是字符串,它们会重叠在一起,无法清晰地读取。
类似的情况也发生在图例中,如果窗口大小被调整,它不会随之调整大小。
是否有相关设置可以解决这个问题?
1个回答

11

不完全准确。(不过,可以看看新的matplotlib.pyplot.tight_layout()函数,它有点类似...)

然而,通常处理长x轴刻度标签的技巧就是将它们旋转。

例如,如果我们有一些重叠的xticklabels:

import matplotlib.pyplot as plt

plt.plot(range(10))
labels = [15 * repr(i) for i in range(10)]
plt.xticks(range(10), labels)
plt.show()

enter image description here

我们可以对它们进行旋转,使它们更易于阅读:(关键是 rotation=30。调用 plt.tight_layout() 只是调整绘图的底部边缘,以便标签不会超出底部边缘。)
import matplotlib.pyplot as plt

plt.plot(range(10))
labels = [10 * repr(i) for i in range(10)]
plt.xticks(range(10), labels, rotation=30)
plt.tight_layout()
plt.show()

enter image description here

默认情况下,刻度标签位于刻度线中心。对于旋转的刻度线,将标签的左侧或右侧边缘与刻度线对齐通常更合理。

例如,类似于这样的情况(右侧,正旋转):

import matplotlib.pyplot as plt

plt.plot(range(10))
labels = [10 * repr(i) for i in range(10)]
plt.xticks(range(10), labels, rotation=30, ha='right')
plt.tight_layout()
plt.show()

enter image description here

或者这样(左侧,负旋转):

import matplotlib.pyplot as plt

plt.plot(range(10))
labels = [10 * repr(i) for i in range(10)]
plt.xticks(range(10), labels, rotation=-30, ha='left')
plt.tight_layout()
plt.show()

enter image description here


Joe,如果我不想要任何数字并且想要回收空间,这样生成的画布就没有边距,只有正方形(最好只有图形,没有线条)?我正在尝试在gtk容器中显示它,并且我需要将其精确定位。a.axis('off')只会删除数字,而a.margins(0, tight=True)似乎无效...帮帮我! - yPhil
1
@xaccrocheur - ax.margins 控制的是数据限制的自动缩放,而不是图形的“外部”边距。如果您想要控制轴占用画布的大小,可以手动创建一个占据整个图形的轴,使用 ax = fig.add_axes([0, 0, 1, 1]),或者使用 subplots_adjust 来更改子图的“外部”边距(例如 fig.subplots_adjust(0, 0, 1, 1))。 - Joe Kington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接