Matplotlib:调整刻度以适合图中

Har*_*Har 2 python matplotlib figure

我有以下matplotlib代码,它所做的全部是在x轴上绘制0-20,在y轴上绘制0-100

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(20))
ax.set_yticks(range(100))
labels = ax.set_yticklabels(range(100))
Run Code Online (Sandbox Code Playgroud)

我的问题是,并非所有标签实际上都适合y轴。

我要做的是将最大标签尺寸除以图形的总面积,以计算可以放入的标签数量,然后将数据分组为0-10、10-20、30-40部分并绘制而不是显示单个标签1,2,3,4,5,6,7,8 ...

我在查找标签的标签大小和图形的标签大小时遇到​​麻烦(如果我写错了,请纠正我,也许是像素的轴大小。这是我第一次使用matplotlib)

如何找出图形/轴占用的像素数(宽度+高度)以及每个标签的像素数(宽度+高度)?

情节

小智 5

只需添加以下行:

plt.tight_layout()


小智 3

您可以使用 获取图中的轴范围ax.get_position(),请参阅有关的文档axes(我会发布一个链接,但我目前的声誉不允许这样做)。

刻度标签大小是在 matplotlibrc 文件中相对于字体大小定义的。请参阅此处的一些详细信息。默认大小为 12pt,可以使用以下命令更改

plt.rcParams['ytick.labelsize'] = small
Run Code Online (Sandbox Code Playgroud)

来自标准 matplotibrc 文件:

可以使用以下值相对于 font.size 定义特殊文本大小:xx-small、x-small、small、medium、large、x-large、xx-large、larger 或smaller

解决问题的最简单方法可能就是使用以下命令更改总图形大小

fig = plt.figure(figsize=(10,30))
Run Code Online (Sandbox Code Playgroud)

在您的情况下,结果如下(请注意,该示例有点极端)。如果刻度标签太多,您必须将总图形大小增加很多,则应考虑减小刻度标签大小(如上所示)或减少刻度标签的数量。

请注意,此过程涉及手动调整总图和/或刻度标签的大小,直到获得所需的输出。如果有更好的方法来做到这一点,我会很高兴看到。

您可以将绘图保存plt.savefig(output.png)在当前工作目录中。如果您使用plt.show()并且图像大于弹出窗口,则标签总是会弄乱,因为总数字缩小到窗口大小,但标签大小保持不变。

我希望这个答案对您有帮助。