代码之家  ›  专栏  ›  技术社区  ›  Cranjis

seaborn如何按熊猫数据框中每行的色调绘制线条图

  •  0
  • Cranjis  · 技术社区  · 4 年前

    我有一个数据框

    df =
    f1.  f2.  f3.  f4.  f5.  g
    1.    2.  3.   4.   1.   0 
    2.    4.  6.   8.   7.   0
    1.    2.  3.   6.   1.   1 
    5.    4.  6.   8.   7.   1
    9.    2.  7.   5.   1.   0 
    8.    4.  2.   4.   5.   1
    

    我想画一个带有误差带的线图,其中每一行是另一个样本,色调由g列决定,值是数字,X轴是列(f1、f2、f3、f4、f5) 可能吗?

    0 回复  |  直到 4 年前
        1
  •  4
  •   David Erickson    4 年前

    对于这些问题,通常需要使用 .melt() :

    import pandas as pd
    import seaborn as sns
    df1 = df.melt(id_vars='g')
    sns.lineplot(data=df1, x='variable', y='value', hue='g')
    df1
    
    Out[1]: 
        g variable  value
    0   0      f1.    1.0
    1   0      f1.    2.0
    2   1      f1.    1.0
    3   1      f1.    5.0
    4   0      f1.    9.0
    5   1      f1.    8.0
    6   0      f2.    2.0
    7   0      f2.    4.0
    8   1      f2.    2.0
    9   1      f2.    4.0
    10  0      f2.    2.0
    11  1      f2.    4.0
    12  0      f3.    3.0
    13  0      f3.    6.0
    14  1      f3.    3.0
    15  1      f3.    6.0
    16  0      f3.    7.0
    17  1      f3.    2.0
    18  0      f4.    4.0
    19  0      f4.    8.0
    20  1      f4.    6.0
    21  1      f4.    8.0
    22  0      f4.    5.0
    23  1      f4.    4.0
    24  0      f5.    1.0
    25  0      f5.    7.0
    26  1      f5.    1.0
    27  1      f5.    7.0
    28  0      f5.    1.0
    29  1      f5.    5.0
    

    enter image description here

        2
  •  4
  •   Trenton McKinney ivirshup    4 年前
    • 使用 pandas.DataFrame.melt
    • 用图形绘制数据 seaborn.pointplot
      • 点图表示通过散点图点的位置对数值变量的中心趋势进行的估计,并使用误差条提供该估计周围不确定性的一些指示。
        • mean ,或其他指定的 estimator .
        • 每个点的钢筋将来自 min max 如果 ci 未指定。使用 ci='sd' 用于表示标准偏差的条形图。
      • 具体说明 hue='g' 将数据按 'g' .
      • dodge 为了便于阅读,将每个点的颜色分开。
    import pandas as pd
    import seaborn as sns
    
    # sample data
    data = {'f1.': [1.0, 2.0, 1.0, 5.0, 9.0, 8.0], 'f2.': [2.0, 4.0, 2.0, 4.0, 2.0, 4.0], 'f3.': [3.0, 6.0, 3.0, 6.0, 7.0, 2.0], 'f4.': [4.0, 8.0, 6.0, 8.0, 5.0, 4.0], 'f5.': [1.0, 7.0, 1.0, 7.0, 1.0, 5.0], 'g': [0, 0, 1, 1, 0, 1]}
    df = pd.DataFrame(data)
    
    # reshape the dataframe
    dfm = df.melt(id_vars='g')
    
    # plot
    p = sns.pointplot(data=dfm, x='variable', y='value', hue='g', ci='sd', dodge=0.25)
    p.set_title('Error bars are standard deviation')
    p.legend(title='g', bbox_to_anchor=(1.05, 1), loc='upper left')
    

    enter image description here

    p = sns.pointplot(data=dfm, x='variable', y='value', hue='g', dodge=0.25)
    p.set_title('Error bars are min to max')
    p.legend(title='g', bbox_to_anchor=(1.05, 1), loc='upper left')
    

    enter image description here