我正在绘制一个图表,其中y轴上的数字可能会变化很大,需要一种方法来以编程方式确定一个好的绘图宽度,以便它们适合。我目前正在使用以下可怕的黑客攻击,但它不是很强大。例如,如果ymin
和ymax
为1和2,那么这些都是1位数字,但实际的刻度标签将是" 1.3"。有没有办法获得matplotlib实际使用的刻度标签列表,仅给出ymin
和ymax
?
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])
答案 0 :(得分:2)
要获取刻度值,请使用
plt.xticks()
plt.yticks()
这将显示图中的值。您可以手动更改它们,例如
plot.yticks(linspace(ymin,ymax,10))
会在ymin
和ymax
之间为您提供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
在这个答案中。
答案 1 :(得分:1)
从matplotlib 1.1开始,有一个
tight_layout() # or fig.tight_layout() -- depending on the interface
# You are using
并自动调整宽度。它允许指定填充:请参阅the docs。
有时需要手动调整边距:例如,当您将图例放在轴外时。在这种情况下,可以调用
subplots_adjust(bottom=0.1, top=0.9, left=0.1, right=0.95) # or fig.subplots_adjust ...
但请注意,必须在savefig
或show
之前调用这两个命令。