我有以下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标记丢失了。
除了已经拥有的命令之外,我还需要添加什么命令?
答案 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")