使用pyplot创建图的网格

tom*_*mka 1 python plot matplotlib

我是python的新手,使用进行绘图时有些困难pyplot。我的目标是%pylab inline在Juypter Notebook中在线绘制图的网格()。

我编写了一个函数plot_CV,该函数在一些x的多项式的阶上绘制交叉验证erorr,而在整个图中,惩罚程度(lambda)应当变化。最终在lambda中有10个元素,它们由中的第一个参数控制plot_CV。所以

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1) 
ax1 = plot_CV(1,CV_ve=CV_ve)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在,我想我必须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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,如果我继续这样做,则图将变得越来越小,并开始在x和y标签上重叠。这是一张3 x 3的图片。

在此处输入图片说明

有没有一种方法可以均匀分布图,以使其不重叠并更好地利用Jupyter Notebook中的水平和垂直在线空间?为了说明这一点,这里提供了jupyter的屏幕截图:

在此处输入图片说明

最后说明:我仍然需要添加标题或注释,其中包含当前使用的lambda级别plot_CV


编辑:使用建议的紧密布局,给出:

在此处输入图片说明


编辑2:使用fig.set_figheightfig.set_figwidth我最终可以使用可用的全长和高度。

在此处输入图片说明

Kyl*_*son 5

对于您的问题的第一个建议是看一下matplotlib 的“ 紧凑版式指南 ”。

他们有一个看起来在外观上与您的情况非常相似的示例。他们也提供了一些示例和建议,以考虑轴标签和图标题。

此外,您可以使用matplotlib.figure类中的Figure来控制整个图形大小。

图(figsize =(x,y))

figsize:x,y(英寸)

编辑:

这是我从matplotlib网站提取并添加到的示例:

fig.set_figheight(15)图set_figwidth(15)

import matplotlib.pyplot as plt

plt.rcParams['savefig.facecolor'] = "0.8"

def example_plot(ax, fontsize=12):
     ax.plot([1, 2])
     ax.locator_params(nbins=3)
     ax.set_xlabel('x-label', fontsize=fontsize)
     ax.set_ylabel('y-label', fontsize=fontsize)
     ax.set_title('Title', fontsize=fontsize)

plt.close('all')
fig = plt.figure()

fig.set_figheight(15)
fig.set_figwidth(15)


ax1 = plt.subplot2grid((3, 3), (0, 0))
ax2 = plt.subplot2grid((3, 3), (0, 1), colspan=2)
ax3 = plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=2)
ax4 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)

example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)

plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式使用tight_layout实现子图的填充:

plt.tight_layout(pad = 0.4,w_pad = 0.5,h_pad = 1.0)

这样,您就可以防止子图进一步拥挤。

祝你有个好的一天!