绘制具有非重叠x轴的多个系列

时间:2016-09-17 17:38:44

标签: python pandas plot

我有两个数据帧,一个包含另一个的样本子集。

df = pd.DataFrame(data= {'A' : [1,2,3,4,3,2,1]}
               ,index = [1,2,3,4,5,6,7])
df2 = pd.DataFrame(data = {'B' : [0.7, 1.4]}
               ,index = [2,6])

我想绘制这些图,使得完整的数据集是线图,而另一个是条形图。

但是尝试

ax = df.plot()
df2.plot(kind='bar', ax=ax)

给我

My ugly graph

我错过了什么?

修改

我刚发现这件作品

plt.plot(df.index, df['A'])
plt.bar(df2.index, df2['B'])

我应该阅读哪些功能差异/基本原理?

1 个答案:

答案 0 :(得分:1)

你应该按照以下方式进行。

import pandas as pd 
import matplotlib.pyplot as plt
import matplotlib

matplotlib.style.use('ggplot')

df = pd.DataFrame(data= {'A' : [1,2,3,4,3,2,1]}
                       ,index = [1,2,3,4,5,6,7])
df2 = pd.DataFrame(data = {'B' : [0.7, 1.4]}
                       ,index = [2,6])

df_final = pd.concat([df,df2], axis=2)

plt.figure()

ax = df_final['A'].plot(kind='line', color='y', legend='A')

df_final['B'].plot(kind='bar', color='r', legend='B')

plt.show()

在上一个方法中,您会错过以下几点:

  • 索引(作为数字传递)在排序方面没有数字意义。因此,当您将两个数据帧分开,然后逐个绘制它们时,Pandas将无法知道如何将这些图对齐。
  • 如果您使用字符串作为索引,那么在这种情况下,Pandas也不会自动将绘图对齐在一起并填入缺失值。这是一种明智和预期的行为,因为具有不同含义和背景的不同情节可能具有相似的指数。你在原始结果中看到的只是在同一个图上的两个图的重叠,而不考虑任何类型的对齐。

当您想要在同一图中和同一组轴上同时绘制不同的数据帧时,始终将它们对齐。

已编辑: 我稍后在你的问题中看到了编辑,因此添加了这个。

您编辑的一个有效,因为现在您不使用Pandas包装并直接使用matplotlib。 Pandas plot()只是matplotlib的一个包装器。在这种情况下,matplotlib不做任何假设,因为它没有特别注意数据集,只是将列值与适当的索引对齐。但是,我建议将Pandas用于涉及数据集的重要绘图应用程序。 见Pandas documentation on visualization