python - Matplotlib df.plot() 显示点但不显示线,即使指定时也是如此

标签 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 规范的情况下绘制它时,我得到一个空白图表。

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

最佳答案

我认为这是由于数据集中的 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/

相关文章:

python - 无法使用 Pandas to_sql() 方法将数据插入到 Snowflake 数据库表中

python - 使用列表中的源路径来聚合数据框中的成本

python - 如何从 Jupyter Notebook 中的对象释放内存

python - 如何使用 Python 和 matplotlib 制作 4d 图

python - Python hash() 函数的正整数

python - Pandas Dataframe 和 Series join 返回空 Dataframe 或 NaN 列

java - 读取外部进程错误流严重影响性能

python - Pyomo 卡住解算器

python - 在 WxPython 面板中嵌入 Seaborn 图

python - 使用等高线在三个平面上绘制 3D 图的投影