2017-10-19 74 views
1

当我尝试在同一子图上绘制一条线和一个区域时,会发生这种情况。我在调用ay = ax.twinx()并在ay上绘图后发现我的x-ticks消失了。在共享x轴的子图上进行绘图时x-ticks消失

这是我的代码,导致此错误。

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-蜱消失。 但是,如果继续绘图,则可以发现最后一个子图未受影响。

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) 

enter image description here

+0

基本上移动'AX2 = ax.twinx()'_after_您绘制的'ax' – DavidG

回答

1

有两个选项。一个是基于这个问题的答案:matplotlib - pandas - No xlabel and xticks for twinx axes in subploted figures 这是扭转绘图的顺序。首先绘制两个子图,然后为两者创建双轴。

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

enter image description here

现在有时上面可能不是一个选项,所以第二个可能的解决方案已经生成了完整的情节后重新设置可见的蜱。

[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() 
+0

感谢您的所有数据!你能告诉我为什么会发生这种情况吗? – Arthur

+0

由于这只发生在熊猫地块上,我猜测大熊猫因为某种原因绘制包装图案认为它需要设置蜱不可见。你需要知道熊猫代码中哪里出错的确切位置? – ImportanceOfBeingErnest