避免在Seaborn中绘制缺失值

Har*_*hid 4 python visualization time-series seaborn

问题:我有几天的时间序列数据,我使用Seaborn python库的sns.FacetGrid函数以facet形式绘制这些数据.在一些情况下,我发现所提到的seaborn函数nan用连续线绘制两个读数之间的连续缺失值(值).虽然matplotlib将缺失值显示为间隙,这是有道理的.一个演示示例如下

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# create timeseries data for 3 days such that day two contains NaN values
time_duration1 = pd.date_range('1/1/2018', periods=24,freq='H')
data1 = np.random.randn(len(time_duration1))
ds1 = pd.Series(data=data1,index=time_duration1)
time_duration2 = pd.date_range('1/2/2018',periods=24,freq='H')
data2 = [float('nan')]*len(time_duration2)
ds2 = pd.Series(data=data2,index=time_duration2)
time_duration3 = pd.date_range('1/3/2018', periods=24,freq='H')
data3 = np.random.randn(len(time_duration3))
ds3 = pd.Series(data=data3,index=time_duration3)
# combine all three days series and then convert series into pandas dataframe
DS = pd.concat([ds1,ds2,ds3])
DF = DS.to_frame()
DF.plot()
Run Code Online (Sandbox Code Playgroud)

结果如下图 在此输入图像描述

在Matplotlib图上方显示缺失的缺失值.现在让我们为seaborn函数准备相同的数据

DF['col'] = np.ones(DF.shape[0])# dummy column but required for facets
DF['timestamp'] =  DF.index
DF.columns = ['data_val','col','timestamp']
g =  sns.FacetGrid(DF,col='col',col_wrap=1,size=2.5)
g.map_dataframe(plt.plot,'timestamp','data_val')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

看看,seaborn plot如何用一条线显示缺失的数据.我应该如何强制seaborn不用nan这样的线条绘制值?

注意:这是一个虚拟示例,在任何情况下我都需要构面网格来绘制我的数据.

Imp*_*est 7

FacetGrid默认情况下nan从数据中删除.原因是seaborn中的某些功能不适用于nans(特别是一些统计功能,我会说).

为了保留nan数据中的值,请使用以下dropna=False参数FacetGrid:

g = sns.FacetGrid(DF,... , dropna=False)
Run Code Online (Sandbox Code Playgroud)