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_figheight和fig.set_figwidth我最终可以使用可用的全长和高度。
对于您的问题的第一个建议是看一下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)
这样,您就可以防止子图进一步拥挤。
祝你有个好的一天!
| 归档时间: |
|
| 查看次数: |
4306 次 |
| 最近记录: |