【问题标题】:Plot multiple columns of pandas DataFrame using Seaborn使用 Seaborn 绘制多列 pandas DataFrame
【发布时间】:2017-12-09 23:58:46
【问题描述】:

假设我有带有 ['X_Axis','col_2','col_3',...,'col_n',] 列的 DataFrame

我需要在 X 轴上绘制第一列并在 Y 轴上休息。 仅供参考:所有值均已根据 X 轴分组,X 轴值范围为 0-25,所有其他列值已标准化为 0 - 1 的比例。我希望它在同一个图表上,而不是在子图上。

首选:FactorPlot,法线图。

【问题讨论】:

    标签: python pandas matplotlib dataframe seaborn


    【解决方案1】:
    • 一些 seaborn 地块将接受宽数据框 sns.pointplot(data=df, x='X_Axis', y='col_2'),但不接受 sns.pointplot(data=df, x='X_Axis', y=['col_2', 'col_3']),因此最好重塑 DataFrame。
    • 使用pandas.DataFrame.melt 将DataFrame 从宽改成长。
      • 将数据帧从宽格式转换为长格式是all seaborn plots 的标准,而不仅仅是显示的示例。
    • python 3.8.12pandas 1.3.4matplotlib 3.4.3seaborn 0.11.2中测试

    示例数据帧

    import pandas as pd
    import seaborn as sns
    
    df = pd.DataFrame({'X_Axis':[1,3,5,7,10,20],
                       'col_2':[.4,.5,.4,.5,.5,.4],
                       'col_3':[.7,.8,.9,.4,.2,.3],
                       'col_4':[.1,.3,.5,.7,.1,.0],
                       'col_5':[.5,.3,.6,.9,.2,.4]})
    
    # display(df)
       X_Axis  col_2  col_3  col_4  col_5
    0       1    0.4    0.7    0.1    0.5
    1       3    0.5    0.8    0.3    0.3
    2       5    0.4    0.9    0.5    0.6
    3       7    0.5    0.4    0.7    0.9
    4      10    0.5    0.2    0.1    0.2
    5      20    0.4    0.3    0.0    0.4
    
    # convert to long (tidy) form
    dfm = df.melt('X_Axis', var_name='cols', value_name='vals')
    
    # display(dfm.head())
       X_Axis   cols  vals
    0       1  col_2   0.4
    1       3  col_2   0.5
    2       5  col_2   0.4
    3       7  col_2   0.5
    4      10  col_2   0.5
    

    当前的绘图方法

    catplot: 人物级别

    使用seaborn.catplotkind=(例如kind='point' 重现FactorPlot 默认值):

    g = sns.catplot(x="X_Axis", y="vals", hue='cols', data=dfm, kind='point')
    

    pointplot: 轴级

    sns.pointplot(x="X_Axis", y="vals", hue='cols', data=dfm)
    

    原创

    factorplot: 更名为catplot v0.9.0(2018 年 7 月)

    新版本的 seaborn 收到警告:

    factorplot 函数已重命名为 catplot。原始名称将在未来版本中删除。请更新您的代码。请注意,factorplot ('point') 中的默认 kind 已更改为 catplot 中的 'strip'

    g = sns.factorplot(x="X_Axis", y="vals", hue='cols', data=dfm)
    
    # using pd.melt instead of pd.DataFrame.melt for pandas < 0.20.0
    # dfm = pd.melt(df, 'X_Axis', var_name='cols',  value_name='vals')
    # g = sns.factorplot(x="X_Axis", y="vals", hue='cols', data=dfm)
    

    【讨论】:

      【解决方案2】:

      除了强大的@jezrael 对于那些来自谷歌的人来说,如果你打算用原始数据框的索引绘制线条,只需执行以下操作:

      df = pd.DataFrame({'col_2':[.4,.5,.4,.5,.5,.4],
                         'col_3':[.7,.8,.9,.4,.2,.3],
                         'col_4':[.1,.3,.5,.7,.1,.0],
                         'col_5':[.5,.3,.6,.9,.2,.4]})
      
      # resetting index before melting to save the current index in 'index' column...
      df = df.reset_index().melt('index', var_name='cols',  value_name='vals')
      g = sns.catplot(x="index", y="vals", hue='cols', data=df, kind='point')
      

      【讨论】:

        猜你喜欢
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 1970-01-01
        • 2020-04-24
        • 2021-07-18
        • 2017-01-07
        • 2019-08-22
        相关资源
        最近更新 更多