我正在尝试axhline,但发现了不可预测的行为。当我添加axhline时,有时它完全弄乱了我的x-axis,有时却没有。

设定

import matplotlib.pyplot as plt
import pandas as pd

idx = pd.date_range('2016-01-01', '2016-03-31')
ts = pd.Series([0. for d in idx], index=idx)
t1 = ts['2016-01'] + 1
t2 = ts['2016-02'] + 2
t3 = ts['2016-03'] + 3


第一个测试图

python - 影响绘图轴的轴-LMLPHP

正是我想要的。

问题

现在让我们添加一个axhline

ax = ts.plot()
ax.axhline(y=1.5)
t1.plot(ax=ax)
t2.plot(ax=ax)
t3.plot(ax=ax)
plt.ylim([-1, 4]);


python - 影响绘图轴的轴-LMLPHP

根本不符合我的期望!

然而

如果我在末尾添加axhline

ax = ts.plot()
t1.plot(ax=ax)
t2.plot(ax=ax)
t3.plot(ax=ax)
ax.axhline(y=1.5)
plt.ylim([-1, 4]);


python - 影响绘图轴的轴-LMLPHP

没问题。

为什么!?

为什么我绘制的顺序决定了x轴的比例?

版本号

import matplotlib
print pd.__version__
print matplotlib.__version__

0.18.0
1.5.1

最佳答案

“问题”图中没有错。您只需要重新调整x轴的比例,以便时间刻度从2016年开始。如果您非常仔细地查看“问题”图,则会在图的右端看到三个点。

修复它的快速方法:

ax = ts.plot()
ax.axhline(y=1.5)
t1.plot(ax=ax)
t2.plot(ax=ax)
t3.plot(ax=ax)
plt.autoscale()
plt.ylim([-1, 4])
plt.show()


如果先创建axhline,似乎就像在pyplot中一样,在执行plt.show()之前必须重新缩放。

关于python - 影响绘图轴的轴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37146119/

10-11 04:50