避免在Seaborn中绘制缺失值。

6

问题:我有几天的时间序列数据,我使用Seaborn Python库的sns.FacetGrid函数以分面形式绘制这些数据。但在某些情况下,我发现该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()

它的结果如下图所示: enter image description here 上面的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')

enter image description here

请看,seaborn绘图展示了缺失数据的情况。我如何强制seaborn不使用这样的线来绘制NaN值?

注:这是一个虚拟示例,而且我无论如何需要facet grid来绘制我的数据。

1个回答

10
FacetGrid默认会从数据中删除nan。原因是seaborn内部的一些函数无法正确处理nans(特别是一些统计函数)。为了保留数据中的nan值,请在FacetGrid中使用dropna=False参数:
g = sns.FacetGrid(DF,... , dropna=False)

@EHB 是的,这就是问题所问的。 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接