我有一个包含很多缺失值的数据框,如下所示:
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')
这个图看起来像这样:
所以你可以看到,我已经使用 style = '-o'
命令指定它是一个线图,并且它在图例中正确显示,但点没有通过图表上的线。当我在没有 style
规范的情况下绘制它时,我得到一个空白图表。
任何帮助将不胜感激。谢谢。
最佳答案
我认为这是由于数据集中的 NaN 造成的。您的数据根本不整洁。我认为 pandas 可以仅使用堆栈来解决这个问题,但它也不起作用。另外,有点不方便的是,对于特定日期,没有定义两个值(也许可以在这里使用插值。但是,有效的方法很简单:
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()
获取连接结果。
关于python - Matplotlib df.plot() 显示点但不显示线,即使指定时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51784884/