我正在制作一個matplotlib2x2 尺寸的圖形,其中 x 軸和 y 軸是共享的,然后在不同的軸上回圈以在其中繪制。我正在繪制每個樣本的變異資料,并且樣本可能沒有變異資料,因此我希望該圖在中間顯示“NA”。
import matplotlib.pyplot as plt
n_plots_per_fig = 4
nrows = 2
ncols = 2
fig, axs = plt.subplots(nrows, ncols, sharex="all", sharey="all", figsize=(8, 6))
axs = axs.ravel()
for i, ax in enumerate(axs):
x = [1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] # example values, but this list CAN be empty
bins = 3 # example bins
if x:
ax.hist(x, bins=bins) # plot the hist
ax.set_yscale("log")
ax.set_title(str(i), fontsize="medium")
else:
ax.set_title(str(i), fontsize="medium")
ax.text(0.5, 0.5, 'NA', ha='center', va='center', transform=ax.transAxes)
fig.show()
這幾乎適用于所有情況;想要的輸出示例:

但是,只有當圖中的最后一個圖沒有任何資料時,才會干擾對數刻度。觸發此操作的示例代碼:
import matplotlib.pyplot as plt
n_plots_per_fig = 4
nrows = 2
ncols = 2
fig, axs = plt.subplots(nrows, ncols, sharex="all", sharey="all", figsize=(8, 6))
axs = axs.ravel()
for i, ax in enumerate(axs):
x = [1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
bins = 3
if i == n_plots_per_fig-1: # this will distort the log scale
ax.set_title(str(i), fontsize="medium")
ax.text(0.5, 0.5, 'NA', ha='center', va='center', transform=ax.transAxes)
elif x:
ax.hist(x, bins=bins) # plot the hist
ax.set_yscale("log")
ax.set_title(str(i), fontsize="medium")
else:
ax.set_title(str(i), fontsize="medium")
ax.text(0.5, 0.5, 'NA', ha='center', va='center', transform=ax.transAxes)
fig.show()

對數刻度現在設定為非常低的值,這不是我想要的。我已經嘗試了幾件事來解決這個問題,比如取消共享沒有任何資料的情節的 y 軸[ax.get_shared_y_axes().remove(axis) for axis in axs]或隱藏情節ax.set_visible(False),但這些都不起作用。有一件事做的作業是從同積取出軸ax.remove(),但因為這是最底層的樣品,這也消除了對X的值蜱該列:

除此之外,我仍然希望在軸(和“NA”文本)中沒有任何資料可見的示例的名稱,并且洗掉軸不允許這樣做。
關于修復的任何想法?
編輯:我簡化了我的例子。
uj5u.com熱心網友回復:
您可以使用ax.set_xlim()/手動設定限制ax.set_ylim()。請注意,如果您共享軸,則在哪個子圖中呼叫這些函式并不重要。例如:
axs[-1][-1].set_ylim(1e0, 1e2)
如果您之前不知道限制,您可以從其他圖中推斷出來:
x = np.random.random(100)
bins = 10
if bins != 0:
...
yy, xx = np.histogram(x, bins=bins)
ylim = yy.min(), yy.max()
xlim = xx.min(), xx.max()
else:
ax.set_xlim(xlim)
ax.set_ylim(ylim)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/363527.html
標籤:Python matplotlib 阴谋 分享 轴
