Matplotlib df.plot()显示点但不显示线,即使已指定

时间:2018-08-10 10:51:33

标签: python pandas matplotlib

我有一个缺少很多值的数据框,如下所示:

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

date = pd.date_range(start='2003/01/01', end='2005/12/31')

df = pd.DataFrame({'date':date, })

将缺少的值分配给列:

df = pd.DataFrame(np.nan, index=date, columns=['A', 'B'])

在整个过程中添加一些实际值,以说明我的数据的实际外观

df.loc['2003-01-10', 'B'] = 50
df.loc['2003-01-15', 'A'] = 70

df.loc['2003-06-10', 'B'] = 45
df.loc['2003-07-15', 'A'] = 55

df.loc['2004-01-01', 'B'] = 20
df.loc['2004-01-05', 'A'] = 30

df.loc['2004-05-01', 'B'] = 25
df.loc['2004-06-05', 'A'] = 35

df.loc['2005-01-01', 'B'] = 40
df.loc['2005-01-05', 'A'] = 35

绘制数据

df.plot(style = '-o')

此图如下:

enter image description here

因此您可以看到我已经使用style = '-o'命令将其指定为折线图,并且可以正确显示在图例中,但是点在图形上并未被折线连接。当我在没有style规范的情况下进行绘制时,会得到一个空白图形。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

我认为这是由于您数据集中的NaN引起的。您的数据根本不整洁。我以为大熊猫可以只使用堆栈就可以解决这个问题,但它也不起作用。另外,有点不方便的是,对于特定日期,没有同时定义两个值(也许可以在此处使用内插。但是,有效的方法很简单:

df['A'].dropna().plot()
df['B'].dropna().plot()

在单个Jupiter笔记本电池中。这两个图都将绘制到同一轴线上。

插值有效,但由于缩放而看起来有些不同:

pd.concat([df['A'].interpolate(),
           df['B'].interpolate()], axis=1).plot()

请注意,此处直接创建图例。我太懒了,无法覆盖旧的df。

微调插值并意识到它已经是一种DataFrame方法,也可以做到:

df.interpolate(limit_area='inside').plot()

定性地显示drop_na结果或

df.interpolate(limit_area='inside').plot()

显示连续结果。

答案 1 :(得分:2)

您的数据框中有很多NaN值,因此它不能画一条线(实际点彼此不跟随)。

您可以做的是像这样删除nan值:

df.B.dropna().plot()
df.A.dropna().plot()