Я создал 4 сюжета. Каждый выглядит так:
Допустим, у меня есть 4 из этих графиков, которые я создал, например Pi = create_subplot(XYZ)
, которые имеют тип matplotlib.figure.Figure
и я хотел бы расположить их в сетке 2 на 2. Поскольку создание этого графика не так просто, как графики здесь , я не могу просто использовать что-то вроде:
# Some example data to display
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, axs = plt.subplots(2, 2)
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Axis [0, 0]')
axs[0, 1].plot(x, y, 'tab:orange')
axs[0, 1].set_title('Axis [0, 1]')
axs[1, 0].plot(x, -y, 'tab:green')
axs[1, 0].set_title('Axis [1, 0]')
axs[1, 1].plot(x, -y, 'tab:red')
axs[1, 1].set_title('Axis [1, 1]')
, чтобы получить такой результат:
Могу ли я как-нибудь упорядочить свои подзаговоры (P1
, P2
, P3
, P4
), чтобы достичь чего-то похожего на рисунок выше? или предположим, что вы прочитали изображение льва с диска и хотите поместить его рядом с графиком sin(x)
. Вы не можете использовать axs[0, 0].plot(lion image)
. Должен быть способ сделать это в Python, ради бога
Я создал графики Pi
, используя свою функцию ниже (обратите внимание, есть некоторые функции, например rc.FUNCTION
, rc
это еще один мой модуль, который импортируется в сценарий построения):
def subplots_savitzky(current_field, deltA ):
county = current_field['county'].unique()[0]
ID = current_field['ID'].unique()[0]
X = current_field['doy']
y = current_field[indeks]
#############################################
###
### Smoothen
###
#############################################
SG_pred_31 = scipy.signal.savgol_filter(y, window_length= 3, polyorder=1)
SG_pred_32 = scipy.signal.savgol_filter(y, window_length= 3, polyorder=2)
SG_pred_51 = scipy.signal.savgol_filter(y, window_length= 5, polyorder=1)
SG_pred_52 = scipy.signal.savgol_filter(y, window_length= 5, polyorder=2)
SG_pred_53 = scipy.signal.savgol_filter(y, window_length= 5, polyorder=3)
SG_pred_71 = scipy.signal.savgol_filter(y, window_length= 7, polyorder=1)
SG_pred_72 = scipy.signal.savgol_filter(y, window_length= 7, polyorder=2)
SG_pred_73 = scipy.signal.savgol_filter(y, window_length= 7, polyorder=3)
SG_pred_91 = scipy.signal.savgol_filter(y, window_length= 9, polyorder=1)
SG_pred_92 = scipy.signal.savgol_filter(y, window_length= 9, polyorder=2)
SG_pred_93 = scipy.signal.savgol_filter(y, window_length= 9, polyorder=3)
#############################################
###
### find peaks
###
#############################################
SG_max_min_31 = rc.my_peakdetect(y_axis=SG_pred_31, x_axis=X, delta=deltA);
SG_max_31 = SG_max_min_31[0]; SG_min_31 = SG_max_min_31[1];
SG_max_31 = rc.separate_x_and_y(m_list = SG_max_31);
SG_min_31 = rc.separate_x_and_y(m_list = SG_min_31);
SG_max_DoYs_series_31 = pd.Series(SG_max_31[0]);
SG_max_series_31 = pd.Series(SG_max_31[1]);
SG_min_DoYs_series_31 = pd.Series(SG_min_31[0]);
SG_min_series_31 = pd.Series(SG_min_31[1]);
SG_max_min_32 = rc.my_peakdetect(y_axis=SG_pred_32, x_axis=X, delta=deltA);
SG_max_32 = SG_max_min_32[0]; SG_min_32 = SG_max_min_32[1];
SG_max_32 = rc.separate_x_and_y(m_list = SG_max_32);
SG_min_32 = rc.separate_x_and_y(m_list = SG_min_32);
SG_max_DoYs_series_32 = pd.Series(SG_max_32[0]);
SG_max_series_32 = pd.Series(SG_max_32[1]);
SG_min_DoYs_series_32 = pd.Series(SG_min_32[0]);
SG_min_series_32 = pd.Series(SG_min_32[1]);
############
############ window 5
############
SG_max_min_51 = rc.my_peakdetect(y_axis=SG_pred_51, x_axis=X, delta=deltA);
SG_max_51 = SG_max_min_51[0]; SG_min_51 = SG_max_min_51[1];
SG_max_51 = rc.separate_x_and_y(m_list = SG_max_51);
SG_min_51 = rc.separate_x_and_y(m_list = SG_min_51);
SG_max_DoYs_series_51 = pd.Series(SG_max_51[0]);
SG_max_series_51 = pd.Series(SG_max_51[1]);
SG_min_DoYs_series_51 = pd.Series(SG_min_51[0]);
SG_min_series_51 = pd.Series(SG_min_51[1]);
SG_max_min_52 = rc.my_peakdetect(y_axis=SG_pred_52, x_axis=X, delta=deltA);
SG_max_52 = SG_max_min_52[0]; SG_min_52 = SG_max_min_52[1];
SG_max_52 = rc.separate_x_and_y(m_list = SG_max_52);
SG_min_52 = rc.separate_x_and_y(m_list = SG_min_52);
SG_max_DoYs_series_52 = pd.Series(SG_max_52[0]);
SG_max_series_52 = pd.Series(SG_max_52[1]);
SG_min_DoYs_series_52 = pd.Series(SG_min_52[0]);
SG_min_series_52 = pd.Series(SG_min_52[1]);
SG_max_min_53 = rc.my_peakdetect(y_axis=SG_pred_53, x_axis=X, delta=deltA);
SG_max_53 = SG_max_min_53[0]; SG_min_53 = SG_max_min_53[1];
SG_max_53 = rc.separate_x_and_y(m_list = SG_max_53);
SG_min_53 = rc.separate_x_and_y(m_list = SG_min_53);
SG_max_DoYs_series_53 = pd.Series(SG_max_53[0]);
SG_max_series_53 = pd.Series(SG_max_53[1]);
SG_min_DoYs_series_53 = pd.Series(SG_min_53[0]);
SG_min_series_53 = pd.Series(SG_min_53[1]);
############
############ window 7
############
SG_max_min_71 = rc.my_peakdetect(y_axis=SG_pred_71, x_axis=X, delta=deltA);
SG_max_71 = SG_max_min_71[0]; SG_min_71 = SG_max_min_71[1];
SG_max_71 = rc.separate_x_and_y(m_list = SG_max_71);
SG_min_71 = rc.separate_x_and_y(m_list = SG_min_71);
SG_max_DoYs_series_71 = pd.Series(SG_max_71[0]);
SG_max_series_71 = pd.Series(SG_max_71[1]);
SG_min_DoYs_series_71 = pd.Series(SG_min_71[0]);
SG_min_series_71 = pd.Series(SG_min_71[1]);
SG_max_min_72 = rc.my_peakdetect(y_axis=SG_pred_72, x_axis=X, delta=deltA);
SG_max_72 = SG_max_min_72[0]; SG_min_72 = SG_max_min_72[1];
SG_max_72 = rc.separate_x_and_y(m_list = SG_max_72);
SG_min_72 = rc.separate_x_and_y(m_list = SG_min_72);
SG_max_DoYs_series_72 = pd.Series(SG_max_72[0]);
SG_max_series_72 = pd.Series(SG_max_72[1]);
SG_min_DoYs_series_72 = pd.Series(SG_min_72[0]);
SG_min_series_72 = pd.Series(SG_min_72[1]);
SG_max_min_73 = rc.my_peakdetect(y_axis=SG_pred_73, x_axis=X, delta=deltA);
SG_max_73 = SG_max_min_73[0]; SG_min_73 = SG_max_min_73[1];
SG_max_73 = rc.separate_x_and_y(m_list = SG_max_73);
SG_min_73 = rc.separate_x_and_y(m_list = SG_min_73);
SG_max_DoYs_series_73 = pd.Series(SG_max_73[0]);
SG_max_series_73 = pd.Series(SG_max_73[1]);
SG_min_DoYs_series_73 = pd.Series(SG_min_73[0]);
SG_min_series_73 = pd.Series(SG_min_73[1]);
############
############ window 9
############
SG_max_min_91 = rc.my_peakdetect(y_axis=SG_pred_91, x_axis=X, delta=deltA);
SG_max_91 = SG_max_min_91[0]; SG_min_91 = SG_max_min_91[1];
SG_max_91 = rc.separate_x_and_y(m_list = SG_max_91);
SG_min_91 = rc.separate_x_and_y(m_list = SG_min_91);
SG_max_DoYs_series_91 = pd.Series(SG_max_91[0]);
SG_max_series_91 = pd.Series(SG_max_91[1]);
SG_min_DoYs_series_91 = pd.Series(SG_min_91[0]);
SG_min_series_91 = pd.Series(SG_min_91[1]);
SG_max_min_92 = rc.my_peakdetect(y_axis=SG_pred_92, x_axis=X, delta=deltA);
SG_max_92 = SG_max_min_92[0]; SG_min_92 = SG_max_min_92[1];
SG_max_92 = rc.separate_x_and_y(m_list = SG_max_92);
SG_min_92 = rc.separate_x_and_y(m_list = SG_min_92);
SG_max_DoYs_series_92 = pd.Series(SG_max_92[0]);
SG_max_series_92 = pd.Series(SG_max_92[1]);
SG_min_DoYs_series_92 = pd.Series(SG_min_92[0]);
SG_min_series_92 = pd.Series(SG_min_92[1]);
SG_max_min_93 = rc.my_peakdetect(y_axis=SG_pred_93, x_axis=X, delta=deltA);
SG_max_93 = SG_max_min_93[0]; SG_min_93 = SG_max_min_93[1];
SG_max_93 = rc.separate_x_and_y(m_list = SG_max_93);
SG_min_93 = rc.separate_x_and_y(m_list = SG_min_93);
SG_max_DoYs_series_93 = pd.Series(SG_max_93[0]);
SG_max_series_93 = pd.Series(SG_max_93[1]);
SG_min_DoYs_series_93 = pd.Series(SG_min_93[0]);
SG_min_series_93 = pd.Series(SG_min_93[1]);
########################################################################################################
########################################################################################################
plotting_dic = { "SG 31" : [SG_pred_31, SG_max_DoYs_series_31, SG_max_series_31],
"SG 32" : [SG_pred_32, SG_max_DoYs_series_32, SG_max_series_32],
"SG 51" : [SG_pred_51, SG_max_DoYs_series_51, SG_max_series_51],
"SG 52" : [SG_pred_52, SG_max_DoYs_series_52, SG_max_series_52],
"SG 53" : [SG_pred_53, SG_max_DoYs_series_53, SG_max_series_53],
"SG 71" : [SG_pred_71, SG_max_DoYs_series_71, SG_max_series_71],
"SG 72" : [SG_pred_72, SG_max_DoYs_series_72, SG_max_series_72],
"SG 73" : [SG_pred_73, SG_max_DoYs_series_73, SG_max_series_73],
"SG 91" : [SG_pred_91, SG_max_DoYs_series_91, SG_max_series_91],
"SG 92" : [SG_pred_92, SG_max_DoYs_series_92, SG_max_series_92],
"SG 93" : [SG_pred_93, SG_max_DoYs_series_93, SG_max_series_93]
}
#############################################
###
### plot
###
#############################################
plot_title = county + ", " + plant + " (" + ID + ")"
sb.set();
fig, ax = plt.subplots(figsize=(8,6));
ax.scatter(X, y, label="Raw data", s=30);
for co, ite in enumerate(plotting_dic):
ax.plot(X, plotting_dic[ite][0], label = ite, c = eleven_colors[co])
ax.scatter(plotting_dic[ite][1], plotting_dic[ite][2], s=100, marker='*', c = eleven_colors[co]);
ax.set_title(plot_title);
ax.set(xlabel='DoY', ylabel=indeks)
ax.legend(loc="best");
return (fig)