线条不显示在条形图上

Mar*_*n B 5 python matplotlib dataframe python-3.x pandas

我正在尝试在条形图上绘制一条线。

这是我的数据框:

       meh  fiches     ratio
2007  1412    1338  0.947592
2008  1356    1324  0.976401
2009  1394    1298  0.931133
2010  1352    1275  0.943047
2011  1398    1325  0.947783
2012  1261    1215  0.963521
2013  1144     845  0.738636
2014  1203    1167  0.970075
2015  1024    1004  0.980469
2016  1197    1180  0.985798
Run Code Online (Sandbox Code Playgroud)

当我运行这两行时,我得到:

ax = graph[['meh', 'fiches']].plot(kind='bar', color=['#666666','#999999'])
graph[['ratio']].plot(kind='line',color='red', linestyle='-', secondary_y=True, ax=ax)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,如果我删除 kind='bar' 我会得到三行,如果我将 kind='line' 更改为 kind='bar' 我得到三行...

aso*_*uin 4

问题是您的条形图绘制为类别,而您的线条绘制在连续轴上 - 因此,虽然您的条形图的 x 位置看起来像是年份,但它们实际上是值 0 到 9。为了解决这个问题,您可以在绘制比率时使用以下命令指定 x 值ax.get_xticks()

import io

import pandas as pd
import matplotlib.pyplot as plt

data = io.StringIO('''       meh  fiches     ratio
2007  1412    1338  0.947592
2008  1356    1324  0.976401
2009  1394    1298  0.931133
2010  1352    1275  0.943047
2011  1398    1325  0.947783
2012  1261    1215  0.963521
2013  1144     845  0.738636
2014  1203    1167  0.970075
2015  1024    1004  0.980469
2016  1197    1180  0.985798''')

graph = pd.read_csv(data, sep='\s+')

ax = graph[['meh', 'fiches']].plot(kind='bar', color=['#666666','#999999'])
graph[['ratio']].plot(x=ax.get_xticks(), kind='line',color='red', linestyle='-', secondary_y=True, ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

由此可见:

条形图上有线条