简体   繁体   English

Python Seaborn:Plot 多分布图在 Facetgrid

[英]Python Seaborn: Plot multiple distplot in Facetgrid

I have a dataframe which looks like below:我有一个 dataframe 如下所示:

df:东风:

RY         MAJ_CAT                  Value
2016    Cause Unknown              0.00227
2016    Vegetation                 0.04217
2016    Vegetation                 0.04393
2016    Vegetation                 0.07878
2016    Defective Equip            0.00137
2018    Cause Unknown              0.00484
2018    Defective Equip            0.01546
2020    Defective Equip            0.05169
2020    Defective Equip            0.00515
2020    Cause Unknown              0.00050

I want to plot the distribution of the value over the given years.我想 plot 给定年份的值分布。 So I used distplot of seaborn by using following code:所以我通过使用以下代码使用了 seaborn 的 distplot:

year_2016 = df[df['RY']==2016]
year_2018 = df[df['RY']==2018]
year_2020 = df[df['RY']==2020]
sns.distplot(year_2016['value'].values, hist=False,rug=True)    
sns.distplot(year_2018['value'].values, hist=False,rug=True)   
sns.distplot(year_2020['value'].values, hist=False,rug=True)

In the next step I want to plot the same value distribution over the given year w.r.t MAJ_CAT.在下一步中,我想要 plot 在给定年份 w.r.t MAJ_CAT 上的相同值分布。 So I decided to use Facetgrid of seaborn, below is the code:所以我决定使用seaborn的Facetgrid,下面是代码:

g = sns.FacetGrid(df,col='MAJ_CAT')
g = g.map(sns.distplot,df[df['RY']==2016]['value'].values, hist=False,rug=True))    
g = g.map(sns.distplot,df[df['RY']==2018]['value'].values, hist=False,rug=True))    
g = g.map(sns.distplot,df[df['RY']==2020]['value'].values, hist=False,rug=True))

However, when it ran the above command, it throws the following error:但是,当它运行上述命令时,会引发以下错误:

 KeyError: "None of [Index([(0.00227, 0.04217, 0.043930000000000004, 0.07877999999999999, 0.00137, 0.0018800000000000002, 0.00202, 0.00627, 0.00101, 0.07167000000000001, 0.01965, 0.02775, 0.00298, 0.00337, 0.00088, 0.04049, 0.01957, 0.01012, 0.12065, 0.23699, 0.03639, 0.00137, 0.03244, 0.00441, 0.06748, 0.00035, 0.0066099999999999996, 0.00302, 0.015619999999999998, 0.01571, 0.0018399999999999998, 0.03425, 0.08046, 0.01695, 0.02416, 0.08975, 0.0018800000000000002, 0.14743, 0.06366000000000001, 0.04378, 0.043, 0.02997, 0.0001, 0.22799, 0.00611, 0.13960999999999998, 0.38871, 0.018430000000000002, 0.053239999999999996, 0.06702999999999999, 0.14103, 0.022719999999999997, 0.011890000000000001, 0.00186, 0.00049, 0.13947, 0.0067, 0.00503, 0.00242, 0.00137, 0.00266, 0.38638, 0.24068, 0.0165, 0.54847, 1.02545, 0.01889, 0.32750999999999997, 0.22526, 0.24516, 0.12791, 0.00063, 0.0005200000000000001, 0.00921, 0.07665, 0.00116, 0.01042, 0.27046, 0.03501, 0.03159, 0.46748999999999996, 0.022090000000000002, 2.2972799999999998, 0.69021, 0.22529000000000002, 0.00147, 0.1102, 0.03234, 0.05799, 0.11744, 0.00896, 0.09556, 0.03202, 0.01347, 0.00923, 0.0034200000000000003, 0.041530000000000004, 0.04848, 0.00062, 0.0031100000000000004, ...)], dtype='object')] are in the [columns]"

I am not sure where am I making the mistake.我不确定我在哪里犯了错误。 Could anyone please help me in fixing the issue?谁能帮我解决这个问题?

setup the dataframe设置 dataframe

import pandas as pd
import numpy as np
import seaborn as sns

# setup dataframe of synthetic data
np.random.seed(365)
data = {'RY': np.random.choice([2016, 2018, 2020], size=400),
        'MAJ_CAT': np.random.choice(['Cause Unknown', 'Vegetation', 'Defective Equip'], size=400),
        'Value': np.random.random(size=400) }

df = pd.DataFrame(data)

Updated Answer更新的答案

  • From seaborn v0.11来自seaborn v0.11
  • Usesns.displot with kind='kde' and rug=Truesns.displotkind='kde'rug=True一起使用
    • Is a figure-level interface for drawing distribution plots onto a FacetGrid.是用于在 FacetGrid 上绘制分布图的图形级界面。

Plotting all 'MAJ_CAT' together将所有'MAJ_CAT'绘制在一起

sns.displot(data=df, x='Value', hue='RY', kind='kde', palette='tab10', rug=True)

在此处输入图像描述

Plotting 'MAJ_CAT' separately分别绘制'MAJ_CAT'

sns.displot(data=df, col='MAJ_CAT', x='Value', hue='RY', kind='kde', palette='tab10', rug=True)

在此处输入图像描述

Original Answer原始答案

  • In seaborn v0.11 , distplot is deprecatedseaborn v0.11中,不推荐使用distplot

distplot分布图

  • Consolidate the original code to generate the distplot合并原代码生成distplot
for year in df.RY.unique():
    values = df.Value[df.RY == year]
    sns.distplot(values, hist=False, rug=True)

在此处输入图像描述

facetgrid分面网格

  • properly configure the mapping and add hue to FacetGrid正确配置映射并将hue添加到FacetGrid
g = sns.FacetGrid(df, col='MAJ_CAT', hue='RY')
p1 = g.map(sns.distplot, 'Value', hist=False, rug=True).add_legend()

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM