Python绘图纵横比调整:如何设置宽为高3倍的画布?
我来帮你解决这个调整Matplotlib绘图纵横比的问题,同时也解释下你之前用figaspect报错的原因~
首先说下你遇到的'Figure' object is not callable错误:你应该是尝试调用了已创建的Figure对象的figaspect方法,但figaspect其实是matplotlib.pyplot模块下的独立函数,并不是Figure实例的方法,所以才会触发这个报错。
接下来给你几种实现宽为高3倍绘图的可行方法:
方法1:直接在plt.subplots()中指定figsize
这是最直观的方式,直接设置图的宽度和高度数值,让宽度刚好是高度的3倍:
import matplotlib.pyplot as plt # figsize参数格式为(宽度, 高度),这里设置宽9、高3,满足3倍比例 fig, ax = plt.subplots(figsize=(9, 3)) ax.plot(y_test1, linewidth=0.5, linestyle="-", label='Test1') ax.plot(y_test2, linewidth=0.5, linestyle="-", label='Test2') legend = ax.legend(loc='right center', prop={'size': 5}, shadow=True, fontsize='medium') # 推荐用ax.set_xlabel这类面向对象写法,比全局plt.xlabel更清晰 ax.set_xlabel('images') ax.set_ylabel('error') ax.grid() ax.axis([0,100, 0, 20]) plt.show()
方法2:正确使用plt.figaspect创建画布
如果想用figaspect来实现,要注意它的参数是高宽比(height/width)。我们要宽是高的3倍,对应的高宽比就是1/3,正确用法如下:
import matplotlib.pyplot as plt # 用plt.figaspect计算合适的figsize,参数1/3表示高度是宽度的1/3,即宽是高的3倍 fig = plt.figure(figsize=plt.figaspect(1/3)) ax = fig.add_subplot(111) ax.plot(y_test1, linewidth=0.5, linestyle="-", label='Test1') ax.plot(y_test2, linewidth=0.5, linestyle="-", label='Test2') legend = ax.legend(loc='right center', prop={'size': 5}, shadow=True, fontsize='medium') ax.set_xlabel('images') ax.set_ylabel('error') ax.grid() ax.axis([0,100, 0, 20]) plt.show()
这样就不会再触发之前的报错了,因为我们是正确调用了plt.figaspect函数来生成合适的画布尺寸,而非错误调用Figure对象的方法。
补充:区分“画布物理比例”和“坐标轴数据比例”
如果你想调整的是坐标轴上数据的显示比例(比如让x轴1单位长度等于y轴3单位长度),可以用ax.set_aspect()方法,但这和你要的“画布物理宽高3倍”不是一回事,这里也提一下供你参考:
# 在原有代码基础上添加这一行即可 ax.set_aspect(1/3) # 参数为y轴单位长度/x轴单位长度,设置后x轴1单位对应y轴3单位
这种方法不会改变画布的整体物理大小,只会调整坐标轴的显示比例。
内容的提问来源于stack exchange,提问作者csi
相关产品推荐
相关产品推荐

