从熊猫数据框中进行多线绘图时,绘图没有实线

时间:2019-04-11 12:30:54

标签: python pandas

我得到了一个包含以下信息的数据框:

date  time   percentage
 12   08:09      42    
 12   08:09      42    
 12   08:21      41    
 12   08:47      40    
 ...    ...         ...
 13   23:13      53    
 13   23:14      54    
 13   23:15      55    
 13   23:16      56 

我使用以下代码:

df.percentage=df.percentage.astype(int)

df.set_index([df.groupby(['date']).cumcount(), 'date', 'time'])['percentage']\
  .unstack('date').reset_index(0, drop=True).sort_index().plot()

如果我运行此代码并从一个日志文件中绘制出一行,则会得到以下结果:

as shown in figure

但是当我在日志中有两个不同的日期时使用它时,我会得到:

enter image description here

但是我想得到两条实线,我怎么了?

1 个答案:

答案 0 :(得分:1)

这里发生的是,在第一种情况下,库会自动对缺失点进行插值,而在第二种情况下,则不会发生。

让我们复制您的代码:

# first we try to create df
    %matplotlib inline
import pandas as pd
import numpy as np
dates = pd.date_range(start='2019-04-12 08:00',
                      end='2019-04-12 23:45',
                      freq="T")
df = pd.DataFrame({"date":dates})
df1 = (df["date"]+pd.DateOffset(1)).to_frame()
df = pd.concat([df,df1], ignore_index=True)

# Now we need to remove some (50%) rows
idx2rm =np.random.choice(range(len(df)),int(len(df)*.5) , replace=False)

df = df[~df.index.isin(idx2rm)].reset_index(drop=True)

df["time"] = df.date.astype(str).str[-8:-3]
df["date"] = df["date"].dt.day
df["percentage"] = np.random.randint(1,60, len(df))

现在,我使用pivot_table获得一个df,每个日期都有一列

ddf = pd.pivot_table(df,
                     index="time",
                     columns="date",
                     values="percentage")

如果我们尝试绘图,我们会得到您不喜欢的无花果

ddf.plot(figsize=(16,6))\
   .legend(loc="upper left", bbox_to_anchor=(1,1));

但是我们可以通过

进行修复
ddf.interpolate()\
   .plot(figsize=(16,6))\
   .legend(loc="upper left", bbox_to_anchor=(1,1));