【问题标题】:Difficulties importing data into Seaborn Boxplot将数据导入 Seaborn Boxplot 的困难
【发布时间】:2020-07-27 13:31:35
【问题描述】:

编辑:下面的用户#kgoettler 提供了一个解决方案。问题源于 Seaborn Boxplot 要求数据按 x 轴中的变量和 y 轴中的值进行组织。下面的脚本将数据重新组织成与 Seaborn Boxplot 兼容的形式。

原始问题:我的目标是使用 CSV 文件中的数据生成箱线图。我想使用 Python 可视化库 Seaborn。数据使用公共索引(对象)和每列的标题进行组织。

我无法使用以下格式将此数据导入箱线图

seaborn.boxplot(x="variable", y="value")

使用 Pandas 自己的箱线图这不是问题,因为我只是使用以下格式根据标题指定要使用的列

boxplot = data.boxplot(column=['header1', 'header2', 'header3'])

我也希望不必按标题指定每个单独的列,而是自动选择文件中的所有列。

非常感谢所有反馈和意见!

【问题讨论】:

    标签: python pandas csv seaborn


    【解决方案1】:

    这样的事情应该可以工作:

    import matplotlib.pyplot as plt
    import seaborn as sns
    import pandas as pd
    sns.set(style='whitegrid')
    
    csv_file = '/path/to/file.csv'
    df = pd.read_csv(csv_file)
    df = (df
            .set_index(['Object'])          # Set 'Object' column to index
            .rename_axis("Metric", axis=1)  # Rename the column axis "Metric"
            .stack()                        # Stack the columns into the index
            .rename('Score')                # Rename the remaining column 'Score'
            .reset_index()                  # Reset the index
        )
    

    这应该会给你一个如下所示的 DataFrame:

       Object                       Metric     Score
    0     MT1  B1A1 Average Splaying Score  0.426824
    1     MT1  B1A2 Average Splaying Score  0.431351
    2     MT1  B1A3 Average Splaying Score  1.941473
    3     MT2  B1A1 Average Splaying Score -0.021672
    4     MT2  B1A2 Average Splaying Score  3.357387
    

    然后要进行绘图,您所要做的就是:

    fig, ax = plt.subplots(figsize=(10,6))
    ax = sns.boxplot(x='Metric', y='Score', data=df, ax=ax)
    ax.set_xlabel('')
    

    Example Plot

    【讨论】:

    • 谢谢! (特别是对于漂亮的脚本内 cmets)。我删除了“csv_file = '/path/to/file.csv'”,因为我使用的是 jupyter notebook,它自动设置路径并且它有效。经过一番考虑,我想我明白你在这里做什么,我会修改我原来的帖子,这样人们就可以更轻松地寻找相同问题的解决方案。
    • Railsware 对 Axis 在 Pandas 中的工作方式进行了很好的解释,这可能对将来发现这一点并希望了解解决方案脚本的任何人有用。 railsware.com/blog/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-07-15
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2017-06-28
    相关资源
    最近更新 更多