Python 熊猫-条形图和折线图-日期时间轴

Python 熊猫-条形图和折线图-日期时间轴,python,python-3.x,pandas,matplotlib,Python,Python 3.x,Pandas,Matplotlib,我试图绘制一个条形图和一个线条叠加图,其中我的数据以datetime作为索引。 代码如下: import pandas as pd import numpy as np dates = pd.date_range('2019-01-01', '2019-01-31', freq='B') df = pd.DataFrame(index=dates, columns=['a', 'b', 'c'], data = np.random.ran

我试图绘制一个条形图和一个线条叠加图,其中我的数据以datetime作为索引。 代码如下:

import pandas as pd
import numpy as np
dates = pd.date_range('2019-01-01', '2019-01-31', freq='B')
df = pd.DataFrame(index=dates, 
              columns=['a', 'b', 'c'],
              data = np.random.randn(len(dates), 3))

fig, ax = plt.subplots()
df.plot.bar(ax=ax)
df.sum(axis=1).plot(ax=ax)
不幸的是,它只显示最后一个请求的图表。

我正在使用

python 3.6.8
pandas 0.24.0
matplotlib 3.0.2

关于你可以这样做:

fig = plt.figure()
ax = df.plot.bar()
ax2 = ax.twinx()
ax2.plot(df.sum(axis=1).values)
plt.show()
df.plot.bar返回可用于下一个绘图的轴:

还讨论了:


在@ImportanceOfBeingErnest的评论之后,我认为最好的回答方法是使用
use\u index=False
kwarg。 对于数据格式等,这是另一个问题,取决于人们想要实现什么

import pandas as pd
import numpy as np
dates = pd.date_range('2019-01-01', '2019-01-31', freq='B')
df = pd.DataFrame(index=dates,
                  columns=['a', 'b', 'c'],
                  data = np.random.randn(len(dates), 3))

fig, ax = plt.subplots()
df.plot.bar(ax=ax)
df.sum(axis=1).plot(ax=ax, use_index=False)

你在笔记本中使用它吗?对我来说,它只显示matplotlib 2.2.2上的第一个图形(条形图),根据注释,它与索引有关。如果我在两个绘图命令中都设置了
use_index=False
,则条形图和线条都可见,但XTICK只是0到22之间的数字。条形图本质上是分类的,它们将条形图放置为连续的整数位置。因此,要在同一轴上绘制线图,线图也需要分类。如上文所述,这可以通过
使用_index=False
实现。因此,解决方案是用
df.sum(axis=1.plot)(ax=ax,use_index=False)
替换最后一行。我相信处理这个问题最像熊猫的方法是使用@ImportanceOfBeingErnest技巧
use_index=False
我发誓,我当时还以为这个数字是笔记本电脑;)如果你对这个解决方案感到满意,考虑接受它(尽管这是你自己的答案),这样其他人就知道这个问题不需要进一步的关注。