#python #python-3.x #matplotlib #plot #histogram
#python #python-3.x #matplotlib #построение #гистограмма
Вопрос:
Я пытаюсь построить три гистограммы бок о бок (одна строка, 3 столбца), используя цикл for и повторяя один и тот же код, но для другого столбца. Я нашел два разных метода: один — использовать plt.subplots(1, 3, i), а затем выполнить итерацию по i, а другой — явно установить fig, ax = plt.subplots() и заменить каждый plt на ax[i] и повторить это.
Однако ни одна из них не работает должным образом из-за дополнительных строк, которые я отображаю на гистограммах.
Как я мог бы заставить этот код работать для параллельных графиков?
for parameter in ['k', 'm', 'sig']:
plt.hist(df[parameter], density=True, bins=20, label=parameter, ec='black')
mn, mx = plt.xlim()
plt.xlim(mn, mx)
kde_xs = np.linspace(mn, mx, 301)
kde = st.gaussian_kde(df[parameter])
plt.plot(kde_xs, kde.pdf(kde_xs), label="PDF")
plt.legend(loc="upper left")
plt.ylabel('Frequency')
plt.xlabel([parameter])
plt.title(f"Histogram for bootstrapped: {parameter}")
plt.axvline(df[parameter].mean(), color='r', linestyle='solid',
linewidth=2)
Комментарии:
1. Тогда ваша проблема реализуется
Axes.axvline
?2. Несколько проблем, одна из которых — plt.xlim, если я реализую ax [i].xlim, тогда это не сработает. Другой проблемой является plt.title, который не будет работать с ax[i].title . Axvline, похоже, работает нормально. Я думаю, я бы искал общий метод, который позволяет избежать полного изменения кода. Я чувствую, что мне не хватает какого-то простого трюка.
3.
ax.set_xlim
иax.set_title
?4. См. Также Жизненный цикл графика о двух разных API.
5. Отлично, не стесняйтесь публиковать пересмотренный код в качестве ответа!
Ответ №1:
Мне просто нужно было сделать следующее. Используйте оси [i] для всего и функцию zip для итерации по гистограммам.
fig, axes = plt.subplots(1, 3, figsize=(26, 7))
for parameter, i in zip(['k', 'm', 'sig'], [0, 1, 2]):
axes[i].hist(data[parameter].dropna(), density=True, bins=20, label=parameter, ec='black')
mn, mx = axes[i].set_xlim()
axes[i].set_xlim(mn, mx)
kde_xs = np.linspace(mn, mx, 301)
kde = st.gaussian_kde(data[parameter].dropna())
axes[i].plot(kde_xs, kde.pdf(kde_xs), label="PDF")
axes[i].legend(loc="upper left")
axes[i].set_ylabel('Frequency')
axes[i].set_xlabel([parameter])
axes[i].set_title(f"Histogram for bootstrapped: {parameter}")
axes[i].axvline(data[parameter].dropna().mean(), color='r', linestyle='solid', linewidth=2)