これは、同じサブプロット上に線と領域をプロットしようとしたときに発生します。私は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-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は12つのオプションがあります。 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()