Добавить несколько осей из разных источников в одну фигуру - PullRequest
0 голосов
/ 10 марта 2020

Я использую 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()

В конечном итоге я пытаюсь получить одно окно, которое выглядит следующим образом:

enter image description here

Где каждый график был возвращен из другой функции или метода класса.

Какой «объект» мне нужно вернуть из моих функций? И как мне объединить эти три объекта в одну фигуру?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Я бы предложил такой подход, в котором вы определяете топор, на котором вы хотите построить график, в функции:

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.

0 голосов
/ 10 марта 2020

Один из способов сделать это:

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.

Чтобы добавить «евклот», вам придется вызвать другой топор в строке 1 и столбце 0:

ax2 = f.add_subplot(gs[1,0])

Наконец, 'barplot' будет go в другом топоре в строке 1, столбец 1:

ax3 = f.add_subplot(gs[1,1])

См. этот сайт здесь для получения дополнительной справки: Настройка макетов рисунков с использованием GridSpe c и других функций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...