【问题标题】:x-ticks disappear when plotting on subplots sharing x-axis [duplicate]在共享 x 轴的子图上绘图时,x-ticks 消失 [重复]
【发布时间】:2018-03-31 03:49:09
【问题描述】:

当我尝试在同一个子图上绘制一条线和一个区域时会发生这种情况。在我调用 ay=ax.twinx() 并在 ay 上绘图后,我发现我的 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 消失了。 但是,如果继续绘制,您会发现最后一个子图不受影响。

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)

【问题讨论】:

  • 基本上移动ax2 = ax.twinx() 你在ax上绘制任何数据

标签: python pandas matplotlib


【解决方案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()

现在有时上述可能不是一个选项,因此第二种可能的解决方案是在生成完整图后再次设置刻度线可见。

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

【讨论】:

  • 谢谢!你能告诉我为什么会这样吗?
  • 由于这只发生在熊猫地块上,我猜熊猫绘图包装器出于某种原因认为它需要将刻度设置为不可见。您是否需要知道 pandas 代码中出错的确切位置?
猜你喜欢
  • 1970-01-01
  • 2021-03-14
  • 2021-12-15
  • 2017-04-22
  • 2019-07-13
  • 2010-11-27
  • 2018-01-04
  • 1970-01-01
  • 2019-11-09
相关资源
最近更新 更多