Python使用辅助y轴组合条形图和线条图

时间:2017-03-15 15:20:42

标签: python python-3.x pandas matplotlib

我正在尝试绘制一些csv数据。我想绘制一些csv数据。数据如下所示。我试图将第1-11列作为条形图,第12列作为一条线。我可以使用以下代码分别制作两个图,但是如何组合图并且还有一个辅助y轴?

以下是我正在绘制的数据示例

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", index_col="DateTime", parse_dates=True)
df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10]].plot(kind='bar')
df.iloc[:,11].plot(linestyle='-', marker='o')
plt.show()

以下是我用来分别绘制的代码

{{1}}

2 个答案:

答案 0 :(得分:2)

不幸的是,如果x轴是日期轴,似乎无法将条形图和线图绘制到pandas中的相同轴

解决方法是使用matplotlib条形图代替

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", index_col="DateTime", parse_dates=True, delim_whitespace=True)

fig, ax= plt.subplots()

ax.plot_date(df.index, df.iloc[:,11], '-')
for i in range(10):
    diff = df.index[1]-df.index[0]
    spacing = diff/(1.3*len(df.columns))
    ax.bar(df.index+(-5+i)*spacing, df.iloc[:,i], 
           width=spacing/diff, label=df.columns[i]) 
plt.legend()
plt.gcf().autofmt_xdate()
plt.show()

enter image description here

编辑:

如果我们忽略点是日期的事实,则可以在相同的轴上绘制条形图和线图。在下面的代码中,我们确实没有将第一列读作索引

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", parse_dates=True, delim_whitespace=True)

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10,11]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) 
plt.show()

enter image description here

因此,此方法将生成一个图形,其中条形和线点仅按其索引(不是日期)排序。这可能是可接受的,取决于日期是否等间隔

如果我们例如将输入文件更改为跳过日期(2014年6月6日不存在),代码将生成

enter image description here

其中条形和线条点仍然是等间距的,尽管实际上日期不是。

从我们得到的答案开头用matplotlib代码跳过一天绘制相同的数据

enter image description here

确实缺少11/6/2014。

答案 1 :(得分:0)

您只需要在同一轴上绘制它们

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) #set the x-ticks to datetime column and rotate

是我用来在同一图上绘制两个图的代码

enter image description here