Python 使用matplotlib和seaborn绘制异常值

Python 使用matplotlib和seaborn绘制异常值,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我对一家购物中心的一些入口传感器数据进行了异常检测。我想为每个入口创建一个图,并突出显示数据框中异常值列中用True标记的异常值 以下是两个入口的一小部分数据,时间跨度为六天: import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns df = pd.DataFrame({"date": [1, 2, 3, 4, 5, 6, 1, 2, 3, 4,

我对一家购物中心的一些入口传感器数据进行了异常检测。我想为每个入口创建一个图,并突出显示数据框中异常值列中用True标记的异常值

以下是两个入口的一小部分数据,时间跨度为六天:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame({"date": [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
                   "mall": ["Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1", "Mall1"],
                   "entrance": ["West", "West","West","West","West", "West", "East", "East", "East", "East", "East", "East"],
                   "in": [132, 140, 163, 142, 133, 150, 240, 250, 233, 234, 2000, 222],
                   "outlier": [False, False, False, False, False, False, False, False, False, False, True, False]})
为了创建几个图,在完整数据中有20个入口,我在seaborn遇到了lmplot

sns.set_theme(style="darkgrid")
for i, group in df.groupby('entrance'):
    sns.lmplot(x="date", y="in", data=group, fit_reg=False, hue = "entrance")
    #pseudo code
    #for the rows that have an outlier (outlier = True) create a red dot for that observation
plt.show()
我想在这里完成两件事:

线图而不是散点图。我没有成功地使用sns.lineplot为每个入口创建单独的绘图,因为lmplot似乎更适合于此。 对于每个入口图,我想显示哪些观察值是异常值,最好是红点。在我的绘图尝试中,我尝试过编写一些伪代码。 lmplot是一个FaceGrid,在本例中,我认为它更难使用。 将matplotlib.pyplot作为plt导入 导入seaborn作为sns 作为pd进口熊猫 对于i,df.groupby['entry']中的组: 将所有值绘制为线型图 sns.lineplotx=日期,y=输入,数据=组 当离群值为真时,选择数据并绘制它 数据\u t=组[group.outlier==True] sns.scatterplotx=date,y=in,data=data\u t,c=['r'] 使用groupby中的值添加标题 标题:入口:{i} 在此处显示绘图,而不是在循环之外 节目 备选方案 此选项将允许设置图形的列数和行数 输入数学 指定要打印的列数 ncols=2 确定行数,即使有奇数个唯一入口 nrows=math.ceillendf.entry.unique/ncols 图,轴=plt。子批次ncols=ncols,nrows=nrows,figsize=16,16 将轴提取到一个nx1数组中,这更容易使用idx进行索引。 axes=axes.ravel 对于idx,i,enumeratedf.groupby['Entry']中的组: 将所有值绘制为线型图 sns.lineplotx=date,y=in,data=group,ax=axs[idx] 当离群值为真时,选择数据并绘制它 数据\u t=组[group.outlier==True] sns.scatterplotx=date,y=in,data=data\u t,c=['r'],ax=axs[idx] 轴[idx]。设置标题“入口:{i}”
@torkestativ导入matplotlib.pyplot作为pltaah,谢谢!我错误地将其导入为import matplotlib asplt@torkestativ我添加了一个替代选项,它允许您指定图形的行和列,而不是一个接一个地打印。这对于完整数据集生成的大量打印非常有用。我的手指因为滚动而累了。谢谢你慢慢来:@torkestativ不客气。很高兴这对你有用。