如何添加xticks以使用次要y轴进行绘图

时间:2019-09-10 15:05:44

标签: python pandas matplotlib

我有以下MWE,它在一个图中绘制了熊猫数据帧的两列,其中每一列都有自己的y轴:

df = pd.DataFrame({'t': [2000, 2002, 2004, 2006],
                   'a': [2, 4, 6, 8],
                   'b': [100, 200, 300, 400]})

fig = plt.figure(figsize=(10, 10))
plt.xticks(np.arange(2000, 2020, 2))

ax1 = df['b'].plot(label="b")
ax1.set_ylabel("b")
ax1.set_ylim(0, 500)

ax2 = df['a'].plot(secondary_y=True, label="a")
ax2.set_ylabel("a")
ax2.set_ylim(0, 5)

handles, labels = [], []
for ax in fig.axes:
    for h, l in zip(*ax.get_legend_handles_labels()):
        handles.append(h)
        labels.append(l)
plt.legend(handles, labels)

但是,尽管我试图用以下代码行将它们添加到plt.xticks(np.arange(2000, 2020, 2))中,但X标记丢失了。

除了已经拥有的命令之外,我还需要添加什么命令?

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要指定x轴的极限。以下解决方案可以提供帮助。

df = pd.DataFrame({'t': [2000, 2002, 2004, 2006],
                   'a': [2, 4, 6, 8],
                   'b': [100, 200, 300, 400]})

fig = plt.figure(figsize=(10, 10))
plt.xticks(np.arange(2000, 2020, 2))

ax1 = df['b'].plot(label="b")
ax1.set_ylabel("b")
ax1.set_ylim(0, 500)

ax2 = df['a'].plot(secondary_y=True, label="a")
ax2.set_ylabel("a")
ax2.set_ylim(0, 5)

ax3 = df['t'].plot(label="t")
ax3.set_xlabel("t")
ax3.set_xlim(2000,2020)

handles, labels = [], []
for ax in fig.axes:
    for h, l in zip(*ax.get_legend_handles_labels()):
        handles.append(h)
        labels.append(l)
plt.legend(handles, labels)

答案 1 :(得分:0)

plt.xticks(np.arange(2000, 2020, 2))将刻度线设置在2000、2002等位置。 但是,您的绘图范围是0到4,因为这是数据框的索引。

将索引设置为"t"列的值,

df.set_index("t", inplace=True)
ax1 = df['b'].plot(label="b")

或直接绘制列

ax1 = df.plot(x="t", y="b", label="b")