我的子图在图中的位置有些奇怪。顶部、底部和左侧都有大量空间,我不需要这些空间,但右边距距离右轴标签有点太近了。请参阅示例。
我生成它的代码如下。请注意,我使用了ight_layout以及subplots_adjust,但它们都不起作用。
fig = plt.figure(figsize=(7.5,10.))
fig.patch.set_facecolor('silver')
gs = gridspec.GridSpec(3,2,hspace=0.4,wspace=0.1)
ax1 = plt.subplot(gs[:,0])
a1 = plt.plot(x, y, linestyle='-',color='b')
a1 = plt.ylabel('Y')
a1 = plt.ylim(zmax[c],zmin[c])
a1 = plt.xlabel('X')
a1 = plt.xticks([np.around(min(x),2),np.around(min(x)/2,2),0,np.around(max(x)/2,2),np.around(max(x),2)])
a1 = plt.title('(a)',fontsize=12)
ax2 = plt.subplot(gs[0,1])
a2 = plt.plot(x2,y2, linestyle='',marker='o',color='b' )
a2 = plt.ylabel('value')
ax2.yaxis.tick_right()
ax2.yaxis.set_ticks_position('both')
ax2.yaxis.set_label_position("right")
a2 = plt.xlabel('number')
a2 = plt.title('(b)',fontsize=12)
ax3 = plt.subplot(gs[1,1])
a3 = plt.plot(x3,y3, linestyle='--',color='b')
a3 = plt.ylabel('another y')
ax3.yaxis.tick_right()
ax3.yaxis.set_ticks_position('both')
ax3.yaxis.set_label_position("right")
a3 = plt.xlabel('x')
a3 = plt.title('(c)',fontsize=12)
ax4 = plt.subplot(gs[2,1])
a4 = plt.plot(x4,y4, linestyle='--',color='b')
a4 = plt.ylabel('y')
ax4.yaxis.tick_right()
ax4.yaxis.set_ticks_position('both')
ax4.yaxis.set_label_position("right")
a4 = plt.xlabel('x')
a4 = plt.title('(c)',fontsize=12)
plt.suptitle('Title', fontsize=12,y=0.95)
plt.subplots_adjust(left=0, bottom=0, right=1, top=0, wspace=0, hspace=0)
#fig = plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
问题是:如何增加右侧边距,同时缩小其他边距并保留子图之间的填充?
我认为你可以在 GridSpec 环境中执行此操作:
gs = gridspec.GridSpec(3,2,hspace=0.4,wspace=0.1)
gs.update(left=0.1,right=0.9,top=0.965,bottom=0.03,wspace=0.3,hspace=0.09)
Run Code Online (Sandbox Code Playgroud)
您可以控制面板如何接近左/右/上/下边距。对我来说效果很好。
@GS 的解决方案不起作用,但激发了我仔细研究之前考虑的解决方案。
plt.subplots_adjust(left=0.12, bottom=0.08, right=0.85, top=0.92, wspace=0.01, hspace=0.08)
实际上有效。尽管一开始不太直观,但专注于输入的值确实很重要。如果左侧的值=右侧的值且顶部=底部,则会抛出错误。它不是从边缘到中心的距离,而是一个坐标。因此,不变的图形左=0,右=1,下=0,上=1。因此,移动边距基本上是将间隔上的值从 0 移动到 1,并且需要进行一些调整,直到看起来恰到好处。