【问题标题】:Grouped Boxplot in SeabornSeaborn 中的分组箱线图
【发布时间】:2019-04-29 11:32:57
【问题描述】:

在周围一些很棒的人的帮助下,我能够在 seaborn 中生成我的第一个箱形图。我有 2 个单独的 seaborn 图,显示了 excel 表中的两个比较。我现在想要做的是在同一个图上显示两个数据比较(如下两列所示),本质上是创建一个分组箱线图。我试图将数据转换为数据帧,concat,然后融化它,但没有成功。我对python很陌生,所以我想知道你们是否都可以帮助我。以下是我的代码。

import pandas as pd
import numpy as np
import xlrd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from pandas import ExcelWriter
from pandas import ExcelFile
from pandas import DataFrame


excel_file =  'Project File Merger.xlsm'

list_dfs = []

xls = xlrd.open_workbook(excel_file,on_demand=True)

sheet_names = xls.sheet_names()

d_data = {}
for i, sheet_name in enumerate(xls.sheet_names()):
    df = pd.read_excel(excel_file,sheet_name)
    d_data[sheet_names[i]] = df.loc[:,['HMB','PSPPM']]


keys = list(d_data.keys())
values_list1 = list(d_data.values())

print(keys[0])
print(values_list1[0])

返回

Check1.xlsm
                             HMB                                  PSPPM
0                            0.141005                             0.429498
1                            0.141005                             0.429498
2                            0.066071                             0.706797
3                                 NaN                             0.080378
4                            0.045815                             0.004076
5                                 NaN                             0.630156
6                                 NaN                             0.723957
7                                 NaN                             0.712118
8                            0.391531                             0.791329
9                            0.036823                             0.506834
10                           0.391531                             0.791329

现在这就是我卡住的地方。我有一个包含 17 个元素的 values_list(excel 文件中的每个工作表一个)。我希望将每张工作表中的数据组合在一起。我想我可能会遇到问题,因为每个列表元素中有 2 列?任何建议将不胜感激!

【问题讨论】:

    标签: python pandas matplotlib seaborn


    【解决方案1】:

    我不能完全确定完全理解您的问题,尤其是与箱线图有关的问题。但是,据我了解,您有一个字典,其中您的 Excel 工作表名称作为键,DataFrame 作为值。并且您想将所有这些 DataFrame 合并为一个,以便将所有值绘制在一起?

    如果正确,那么一个简单的pd.concat 可以接受一个字典并生成一个以键为索引的新 DataFrame。然后您可以使用reset_index() 来展平DataFrame:

    new_df = pd.concat(d_data).reset_index()
    

    之后,我不知道您想如何绘制箱线图,但例如,您可以在每张表中绘制您的一列的值:

    sns.boxplot(x='level_0', y='HMB', data=new_df)
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2020-08-03
      • 2016-06-11
      • 1970-01-01
      • 2021-09-08
      • 2021-02-03
      • 2017-05-14
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多