【发布时间】:2016-09-23 11:46:26
【问题描述】:
我是 python 新手,在使用 pyplot 绘图时遇到一些困难。我的目标是在 Juypter Notebook 中在线绘制一个网格 (%pylab inline)。
我编写了一个函数plot_CV,它在某个 x 的多项式次数上绘制了交叉验证错误,其中惩罚程度 (lambda) 应该是不同的。最终,lambda 中有 10 个元素,它们由plot_CV 中的第一个参数控制。所以
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1 = plot_CV(1,CV_ve=CV_ve)
给予
现在我想我必须使用add_subplot 来创建一个图网格,如下所示
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax1 = plot_CV(1,CV_ve=CV_ve)
ax2 = fig.add_subplot(2,2,2)
ax2 = plot_CV(2,CV_ve=CV_ve)
ax3 = fig.add_subplot(2,2,3)
ax3 = plot_CV(3,CV_ve=CV_ve)
ax4 = fig.add_subplot(2,2,4)
ax4 = plot_CV(4,CV_ve=CV_ve)
plt.show()
但是,如果我继续这样做,那么图会变得越来越小,并开始在 x 和 y 标签上重叠。这是一张带有 3 x 3 情节的图片。
有没有办法让绘图均匀分布,使它们不重叠并更好地利用 Jupyter Notebook 中的水平和垂直内联空间?为了说明这一点,这里有一个来自 jupyter 的截图:
最后说明:我仍然需要使用plot_CV 中使用的当前 lambda 级别添加标题或注释。
编辑:使用建议的紧凑布局,给出:
编辑 2:使用 fig.set_figheight 和 fig.set_figwidth 我终于可以使用可用的完整长度和高度。
【问题讨论】:
-
您在
plt.show()之前尝试过plt.tight_layout()。否则,您将不得不减少刻度标签频率和轴标签大小。 -
@sascha 谢谢,查看更新
标签: python matplotlib plot