以编程方式调整打印宽度以适应yaxis数字

2024-10-03 11:12:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制一个图,其中y轴上的数字可能变化很大,需要一种方法来通过编程来确定一个好的绘图宽度,使它们适合。我目前正在使用以下可怕的黑客,但它不是很强大。例如,如果ymin和{}是1和2,那么这两个数字都是1位数,但实际的刻度标签是“1.3”。有没有一种方法可以获得matplotlib将实际使用的tick标签列表,只要yminymax?在

ymin, ymax = 1, 1e8

nd = max(len(str(ymin)),  # number of digits (at most) in y-axis numbers
         len(str(ymax)))
wN = .05 + .01*nd # width of the numbers on the y-axis ticks (ymin to ymax)

plt.axes([wN, .06, 1-wN-.01, 1-.12]) # [left, bottom, width, height]
plt.ylabel("the y-axis label")
yticker = matplotlib.ticker.ScalarFormatter()
yticker.set_scientific(False)
plt.gca().yaxis.set_major_formatter(yticker)

plt.axis([0, 9, ymin, ymax])

Plot with not enough room left for the y-axis tick labels


Tags: ofthe方法lenmatplotlibplt数字标签
2条回答

要获取刻度值,请使用

plt.xticks()
plt.yticks()

这将显示绘图中的值。例如,您可以手动更改它们

^{pr2}$

将在yminymax之间给你10个等距的刻度。在

有一种方法可以手动设置标签。例如,您可能需要以下记号值

tick_vals = numpy.linspace(0,1,4)

显示为[0.0, .33, 0.67, 1.0],这可以通过使用round函数设置刻度标签来实现。参数2表示四舍五入到两位数:

tick_labels = [round(tick_vals[i],2) for i in range(len(tick_vals))]

然后使用设置记号标签

plt.yticks(tick_vals, tick_labels)

实际的y轴将缩放以匹配tick_vals设置的值,但它们将根据tick_labels重新标记。在本例中,您负责确保记号标签实际上表示轴上的内容。在


注:我用过

import matplotlib.pyplot as plt
import numpy

在这个答案里。在

从matplotlib 1.1开始有一个

tight_layout() # or fig.tight_layout()   depending on the interface
               #                          You are using

它可以自动调整宽度。它允许指定填充:请参见the docs。在

但有时需要手动调整边距:例如,当您将图例放在轴之外时。在这种情况下,你可以打电话

^{pr2}$

但是请注意,这两个命令都必须在savefigshow之前调用。在

相关问题 更多 >