如何解决如何在 subplot-cutout 中去掉其他 subplots 标题?
我正在尝试从子图图中剪下每一个 Python 子图,下载并将其另存为图片。 为了获得漂亮的剪裁,我使用了强烈推荐的方法 full_extend()(请参阅下面的代码),然后使用 fig.savefig() 保存它们。
但由于某种原因,在 x 轴高度的剪切图中总是有下面子图的标题(如果没有设置在中间)。
This is the picture of the whole figure
This is a cutout of the first subplot
我尝试了几种布局方法,例如 tight_layout()、constrained_layout() 等,以增加子图之间的垂直距离,但都没有工作(请参见上图)。
我使用 google.colab 进行编程。
def full_extent(ax,pad=0.0):
"""Get the full extent of an axes,including axes labels,tick labels,and
titles."""
# For text objects,we need to draw the figure first,otherwise the extents
# are undefined.
ax.figure.canvas.draw()
items = ax.get_xticklabels() + ax.get_yticklabels()
#items += [ax,ax.title,ax.xaxis.label,ax.yaxis.label]
items += [ax,ax.title]
bBox = BBox.union([item.get_window_extent() for item in items])
return bBox.expanded(1.0 + pad,1.0 + pad)
这是上面图表的代码:
xMin = testMin -10
xMax = testMax +10
yMin = np.min(Rausch(Fkt(TeData[0])))+np.min(Rausch(Fkt(TeData[0])))/10
yMax = np.max(Rausch(Fkt(TeData[0])))+np.max(Rausch(Fkt(TeData[0])))/10
fkt = 'p(x)'
OrdTeXData,OrdTeYData = getorderedData(TeData[0],TeData[1])
fig = plt.figure(figsize=(24,12))
sub1 = fig.add_subplot(221)
sub1.plot(OrdTeXData,Fkt(OrdTeXData),'k--',label='Funktion ' + fkt)
sub1.plot(TeData[0],TeData[1],'b.',markersize=1.0,label='Testdaten')
sub1.set_title('Plot der Testdaten (Anzahl: {:,})'.format(testAnzahl),pad = 25)
sub1.set_xlabel('x')
sub1.xaxis.set_label_coords(1,0.48)
sub1.set_ylabel(fkt,rotation = 0)
sub1.yaxis.set_label_coords(0.48,1.02)
sub1.axis([xMin,xMax,yMin,yMax])
sub1.axvline(trMin,yMax,color='red',label='Trainingsintervall')
sub1.axvline(trMax,color='red')
sub1.legend()
axesOnMiddle()
sub2 = fig.add_subplot(222)
sub2.plot(OrdTeXData,label='Funktion ' + fkt)
sub2.plot(TrData[0],TrData[1],'y.',label='Trainingsdaten')
sub2.set_title('Plot der Trainingsdaten (Anzahl: {:,})'.format(trAnzahl),pad = 25)
sub2.set_xlabel('x')
sub2.xaxis.set_label_coords(1,0.48)
sub2.set_ylabel(fkt,rotation = 0)
sub2.yaxis.set_label_coords(0.48,1.02)
sub2.axis([xMin,yMax])
sub2.axvline(trMin,label='Trainingsintervall')
sub2.axvline(trMax,color='red')
sub2.legend()
axesOnMiddle()
sub3 = fig.add_subplot(223)
sub3.plot(OrdTeXData,label='Funktion ' + fkt)
sub3.plot(VIData[0],VIData[1],'g.',label='innere Validierungsdaten')
sub3.set_title('Plot der inneren Validierungsdaten (Anzahl: {:,})'.format(validAnzahl),pad=25)
sub3.set_xlabel('x')
sub3.xaxis.set_label_coords(1,0.48)
sub3.set_ylabel(fkt,rotation = 0)
sub3.yaxis.set_label_coords(0.48,1.02)
sub3.axis([xMin,yMax])
sub3.axvline(trMin,label='Trainingsintervall')
sub3.axvline(trMax,color='red')
sub3.legend()
axesOnMiddle()
sub4 = fig.add_subplot(224)
sub4.plot(OrdTeXData,label='Funktion ' + fkt)
sub4.plot(VOData[0],VOData[1],'c.',label='äußere Validierungsdaten')
sub4.set_title('Plot der äußeren Validierungsdaten (Anzahl: {:,pad=25)
sub4.set_xlabel('x')
sub4.xaxis.set_label_coords(1,0.48)
sub4.set_ylabel(fkt,rotation = 0)
sub4.yaxis.set_label_coords(0.48,1.02)
sub4.axis([xMin,yMax])
sub4.axvline(trMin,label='Trainingsintervall')
sub4.axvline(trMax,color='red')
sub4.legend()
axesOnMiddle()
fig.tight_layout(pad=0.4,w_pad=0.5,h_pad=10)
#download & save the whole figure
fig.savefig('Plot aller Daten (polynimial).png')
files.download('Plot aller Daten (polynimial).png')
#cut-out,download & save the subplots
extent = full_extent(sub1).transformed(fig.dpi_scale_trans.inverted())
fig.savefig('Plot der Testdaten (polynimial).png',bBox_inches=extent)
files.download('Plot der Testdaten (polynimial).png')
extent = full_extent(sub2).transformed(fig.dpi_scale_trans.inverted())
fig.savefig('Plot der Trainingsdaten (polynimial).png',bBox_inches=extent)
files.download('Plot der Trainingsdaten (polynimial).png')
extent = full_extent(sub3).transformed(fig.dpi_scale_trans.inverted())
fig.savefig('Plot der inneren Validierungsdaten (polynimial).png',bBox_inches=extent)
files.download('Plot der inneren Validierungsdaten (polynimial).png')
extent = full_extent(sub4).transformed(fig.dpi_scale_trans.inverted())
fig.savefig('Plot der äußeren Validierungsdaten (polynimial).png',bBox_inches=extent)
files.download('Plot der äußeren Validierungsdaten (polynimial).png')
plt.show()
如果你能帮我弄清楚这里出了什么问题,我会非常高兴,因为我的论文需要图表。
提前确认。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。