为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

凤凰求蛊 2022-08-25 16:35:12
我正在使用Python / matplotlib创建一个图,其中它有三个子图,每个子图都来自不同的“源”或类方法。例如,我有一个名为“plot_spectra.py”的脚本,其中包含带有方法的类。Spectra()Plot()所以,调用Spectra('filename.ext')。Plot() 将返回一个元组,如下代码所示:# create the plotfig, 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 plotreturn 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()最终,我试图获得的是一个如下所示的单个窗口:其中,每个绘图都是从不同的函数或类方法返回的。我需要从函数返回哪个“对象”?如何将这三个对象合并到一个图形中?
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

我建议采用这种方法,其中指定要在函数中绘制的轴:


import matplotlib.pyplot as plt

import numpy as np

import seaborn as sns


def 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 模块。


查看完整回答
反对 回复 2022-08-25
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

一种方法是:


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 和其他函数自定义图形布局


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信