Задача субплота: как построить для каждого графика гистограмму по категориальным значениям? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть DataFrame с тремя числовыми переменными Porosity, Perm и AI.Я хотел бы создать подзаговор, и на каждом графике я бы хотел, чтобы гистограмма трех переменных была категориальной переменной «Фации».Фации могут принимать только два значения: Песок и Сланец.

Таким образом, каждому подпункту нужна гистограмма, и каждая гистограмма должна быть построена на основе категориальной переменной Фации, чтобы провести сравнение между фациями.

Пока что я могу заставить его работать, но я не могу добавить заголовок оси к каждому подпункту.

plt.subplot(311)
plt.hist(df_sd['Porosity'].values, label='Sand', bins=30, alpha=0.6)
plt.hist(df_sh['Porosity'].values, label='Shale', bins=30, alpha=0.6)
ax.set(xlabel='Porosity (fraction)', ylabel='Density', title='Porosity              
      Histogram')
plt.legend()

plt.subplot(312)
plt.hist(df_sd['log10Perm'].values, label='Sand', bins=30, alpha=0.6,)
plt.hist(df_sh['log10Perm'].values, label='Shale', bins=30, alpha=0.6)
ax.set(xlabel='Permeability (mD)', ylabel='Density', title='Permeability 
Histogram')
plt.legend()

plt.subplot(313)
plt.hist(df_sd['AI'].values, label='Sand', bins=30, alpha=0.6)
plt.hist(df_sh['AI'].values, label='Shale', bins=30, alpha=0.6)
ax.set(xlabel='AI (units)', ylabel='Density', title='Acoustic Impedance 
Histogram')

plt.legend()
plt.subplots_adjust(left=0.0, bottom=0.0, right=1.5, top=3.5, wspace=0.1, 
hspace=0.2);


#I have tried with:
fig, axs = plt.subplots(2, 1)
but when I code
axs[0].hist(df_sd['Porosity'].values, label='Sand', bins=30, alpha=0.6)
axs[0].hist(df_sd['Porosity'].values, label='Shale', bins=30, alpha=0.6)

#But the histogram for shale overrides the histogram for Sand.

Я хотел бы получить этот результат , но с осями x и yс названиями ярлыков.Кроме того, было бы полезно иметь заголовок для каждого подзаговора.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я нашел ответ:

fig = plt.figure()
ax = fig.add_subplot(111)
ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(312)
ax2 = fig.add_subplot(313)


plt.subplot(311)
ax1.hist(df_sd['Porosity'].values, label='Sand', bins=30, alpha=0.6)
ax1.hist(df_sh['Porosity'].values, label='Shale', bins=30, alpha=0.6)
ax1.set(xlabel='Porosity (fraction)', ylabel='Density', title='Porosity Histogram')
ax1.legend()
0 голосов
/ 05 февраля 2019

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

fig, axs = plt.subplots(2, 2, constrained_layout=True)
for ax, extend in zip(axs.ravel(), extends):
    cs = ax.contourf(X, Y, Z, levels, cmap=cmap, extend=extend, origin=origin)
    fig.colorbar(cs, ax=ax, shrink=0.9)
    ax.set_title("extend = %s" % extend)
    ax.locator_params(nbins=4)
plt.show()

Я думаю, что главное, на что следует обратить внимание (и это я узнал по ссылке ниже), это их использованиеzip(axs.ravel()) в цикле for, чтобы установить каждый ax и затем отобразить то, что вы хотите, на этом ax.Я вполне уверен, что вы можете адаптировать это для своих целей.

Полный пример доступен по адресу: https://matplotlib.org/gallery/images_contours_and_fields/contourf_demo.html#sphx-glr-gallery-images-contours-and-fields-contourf-demo-py

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