Python 使用pyplot创建绘图网格
我是python新手,在使用Python 使用pyplot创建绘图网格,python,matplotlib,plot,Python,Matplotlib,Plot,我是python新手,在使用pyplot绘图时遇到一些困难。我的目标是在Juypter笔记本中绘制一个网格状的内联绘图(%pylab inline) 我编写了一个函数plot_CV,该函数在某个x的多项式次数上绘制交叉验证erorr,其中在各图上,惩罚程度(lambda)应该是不同的。lambda中最终有10个元素,它们由plot\u CV中的第一个参数控制。所以 fig = plt.figure() ax1 = fig.add_subplot(1,1,1) ax1 = plot_CV(1,C
pyplot
绘图时遇到一些困难。我的目标是在Juypter笔记本中绘制一个网格状的内联绘图(%pylab inline
)
我编写了一个函数plot_CV
,该函数在某个x的多项式次数上绘制交叉验证erorr,其中在各图上,惩罚程度(lambda)应该是不同的。lambda中最终有10个元素,它们由plot\u 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乘3的图
有没有一种方法可以将绘图均匀地隔开,这样它们就不会重叠,从而更好地利用Jupyter笔记本中的水平和垂直直线空间?为了说明这一点,这里提供了jupyter的屏幕截图:
最后一点注意:我仍然需要添加一个标题或注释,其中包含plot\u CV
中使用的当前lambda级别
编辑:使用建议的紧凑布局,给出:
编辑2:使用
fig.set\u fighight
和fig.set\u figwidth
我最终可以使用可用的全长和高度
解决您问题的第一个建议是查看
matplotlib
的“”
他们有一个在视觉上与您的情况非常相似的示例。此外,他们还提供了考虑轴标签和绘图标题的示例和建议
此外,您还可以使用类中的figure来控制总体体形大小
编辑:
以下是我从matplotlib
网站中提取的示例,并添加到:
fig.set_figheight(15)
fig.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()
您可以通过以下方式使用紧密布局来实现子批次的填充:
plt.紧密布局(pad=0.4,w\u pad=0.5,h\u pad=1.0)
这样,您就可以避免子地块之间进一步拥挤
祝你过得愉快 您在
plt.show()
之前是否尝试过plt.tight\u layout()
。否则,您将不得不减少刻度标签频率和轴标签大小。@谢谢,请参阅更新您是否实现了所需的绘图设计?它们看起来更好:)我很好奇,因为我自己很快就会做出很多这样的情节,我想知道。不,到目前为止还没有成功。编辑的结果对我来说仍然不令人满意。它不响应图形大小控制命令;没有错误,但大小也没有变化。是要单独控制所有子图的大小,还是要一起控制整个绘图?完全控制整个绘图的大小就足够了,这样它会变得更清晰。另外,当我制作一个3x4的绘图,而不是4x3时,绘图会紧密结合在一起,并且不会使用绘图右侧的全部空间,看起来更好!我不确定你的下一个目标是什么?
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()