/ / x-tickは、x軸を共有するサブプロット上にプロットすると消えます。[duplicate] - python、pandas、matplotlib

x軸を共有するサブプロット上にプロットするとx-ティックが消える[複製] - python、pandas、matplotlib

これは、同じサブプロット上に線と領域をプロットしようとしたときに発生します。私はay = ax.twinx()とayをプロットした後、私のx-tickが消えることを発見しました。

ここにこのエラーの原因となるコードがあります。

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=[12,12])
data=pd.DataFrame([[1,2,3],[2,3,4],[3,2,4]])
ix = np.unravel_index(0, axes.shape)
ax=axes[ix]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
ax2=ax.twinx()
data.plot(ax=ax,color=["navy","red"])
ax2.plot(y.values, linewidth=2.0)

x-ticks-disappear

ご覧のように、x-tickは消えます。 ただし、プロットを続けると、最後のサブプロットが影響を受けていないことがわかります。

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=[12,12])
data=pd.DataFrame([[1,2,3],[2,3,4],[3,2,4]])
ix = np.unravel_index(0, axes.shape)
ax=axes[ix]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
ax2=ax.twinx()
data.plot(ax=ax,color=["navy","red"])
ax2.plot(y.values, linewidth=2.0)
ix = np.unravel_index(1, axes.shape)
ax=axes[ix]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
ax2=ax.twinx()
data.plot(ax=ax,color=["navy","red"])
ax2.plot(y.values, linewidth=2.0)

ここに画像の説明を入力

回答:

回答№1は1

2つのオプションがあります。 1つはこの質問に対する答えに基づいています: matplotlib - pandas - twinx軸のxlabelとxticksは表示されません。 これはプロットの順序を逆にすることです。最初に2つのサブプロットにプロットし、次に両方の双軸を作成します。

import matplotlib.pyplot as plt
import pandas as pd

fig, axes = plt.subplots(nrows=2, ncols=1)
data=pd.DataFrame([[1,2,3],[2,3,4],[3,2,4]])

ax=axes[0]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
data.plot(ax=ax)

ax3=axes[1]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
data.plot(ax=ax3)

ax2=ax.twinx()
ax2.plot(y.values)
ax4=ax3.twinx()
ax4.plot(y.values)

plt.show()

ここに画像の説明を入力

今では上記のオプションが選択できないことがあるので、2番目に可能な解決策は、完全なプロットが生成された後に再び目盛りを表示することです。

[t.set_visible(True) for t in ax.get_xticklabels()]

完全な例:

import matplotlib.pyplot as plt
import pandas as pd


fig, axes = plt.subplots(nrows=2, ncols=1)
data=pd.DataFrame([[1,2,3],[2,3,4],[3,2,4]])

ax=axes[0]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
ax2=ax.twinx()
data.plot(ax=ax)
ax2.plot(y.values)

ax3=axes[1]
y=pd.DataFrame(data.iloc[:,0]-data.iloc[:,1])
ax4=ax3.twinx()
data.plot(ax=ax3)
ax4.plot(y.values)

[t.set_visible(True) for t in ax.get_xticklabels()]

plt.show()