将来自不同源的多个轴添加到同一图形中

我正在使用Python / matplotlib创建一个图,其中它有三个子图,每个子图都来自不同的“源”或类方法。


例如,我有一个名为“plot_spectra.py”的脚本,其中包含带有方法的类。Spectra()Plot()


所以,调用Spectra('filename.ext')。Plot() 将返回一个元组,如下代码所示:


# create the plot

fig, ax = plt.subplots()

ax.contour(xx, yy, plane, levels=cl, cmap=cmap)

ax.set_xlim(ppm_1h_0, ppm_1h_1)

ax.set_ylim(ppm_13c_0, ppm_13c_1)


# return the contour plot

return fig, ax

我的理解是,“数字”是matplotlib中的“窗口”,而“斧头”是一个单独的情节。然后我想说,在同一个图中绘制了三个这些“斧头”对象,但我正在努力做到这一点,因为我一直得到一个空窗口,我认为我误解了每个对象实际上是什么。


叫:


hnca, hnca_ax = Spectra('data/HNCA.ucsf', type='sparky').Plot(plane_ppm=resi.N(), vline=resi.H())

plt.subplot(2,2,1)

plt.subplot(hnca_ax)


eucplot, barplot = PlotEucXYIntensity(scores, x='H', y='N')


plt.subplot(2,2,3)

plt.subplot(eucplot)


plt.subplot(2,2,4)

plt.subplot(barplot)


plt.show()

最终,我试图获得的是一个如下所示的单个窗口:

http://img1.mukewang.com/630734640001835a12101215.jpg

其中,每个绘图都是从不同的函数或类方法返回的。

我需要从函数返回哪个“对象”?如何将这三个对象合并到一个图形中?


凤凰求蛊
浏览 78回答 2
2回答

呼如林

我建议采用这种方法,其中指定要在函数中绘制的轴:import matplotlib.pyplot as pltimport numpy as npimport seaborn as snsdef Spectra(data, ax):  ax.plot(data)def PlotIntensity(data, ax):  ax.hist(data)def SeabornScatter(data, ax):  sns.scatterplot(data, data, ax = ax)spectrum = np.random.random((1000,))plt.figure()ax1 = plt.subplot(1,3,1)Spectra(spectrum, ax1)ax2 = plt.subplot(1,3,2)SeabornScatter(spectrum, ax2)ax3 = plt.subplot(1,3,3)PlotIntensity(spectrum, ax3)plt.tight_layout()plt.show()您可以通过非常不同的方式为子图指定格网,您可能还想查看 gridspec 模块。

尚方宝剑之说

一种方法是:f = plt.figure()gs = f.add_gridspec(2,2)ax = f.add_subplot(gs[0,:])将“2,2”视为添加 2 行 x 2 列。在第三行“gs[0,:]”告诉在第0行(所有列)上添加一个图表。这将在顶部创建图表。请注意,索引以 0 开头,而不是以 1 开头。要添加“eucplot”,您必须在第 1 行和第 0 列上调用不同的轴:ax2 = f.add_subplot(gs[1,0])最后,“barplot”将进入第1行第1列的另一个轴:ax3 = f.add_subplot(gs[1,1])有关进一步的参考,请参阅此处的此站点:使用 GridSpec 和其他函数自定义图形布局
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python