簡體   English   中英

子圖問題:如何通過分類值為每個圖繪制直方圖?

[英]Subplot problem: how to plot for each plot a histogram by categorical values?

我有一個具有三個數值變量孔隙度,燙發和AI的DataFrame。 我想做一個子圖,在每個圖中,我想用分類變量“ Facies”對三個變量的直方圖。 相只能取兩個值:Sand和Shale。

總而言之,每個子圖都需要一個直方圖,並且每個直方圖都必須基於分類變量“相”來繪制,以便在相之間進行比較。

到目前為止,我可以使它起作用,但是不能將軸標題添加到每個子圖中。

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軸都帶有標簽名稱。 此外,對每個子圖都有一個標題將很有幫助。

我只是用輪廓繪制了一個子圖,但是我認為框架將非常相似:

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()

我認為要注意的主要點(這是我從下面的鏈接中學到的)是他們在for循環中使用zip(axs.ravel())來建立每個ax ,然后在該ax上繪制所需的內容。 我相當確定您可以對此進行調整以適合您的使用。

有關完整示例,請訪問: https : //matplotlib.org/gallery/images_contours_and_fields/contourf_demo.html#sphx-glr-gallery-images-contours-and-fields-contourf-demo-py

我找到了答案:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM