如何在 subplot-cutout 中去掉其他 subplots 标题?

如何解决如何在 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 进行编程。

这是 full_extend() 方法代码

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?