如何用Seaborn将2列数据帧绘制成多个小提琴图

时间:2020-05-07 01:56:35

标签: python-3.x seaborn

我正在努力让自己出生来为我工作。我看过几本教程,但似乎没有任何效果。第一列是浮点值,第二列是类标签。我希望每个班级的标签都有自己的小提琴图。存在阶级失衡。如何将第二列拆分成单独的小提琴图,并将相邻列中的浮点数分配到这些组中?

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

data = <read files and append [float, str] to list>

data = pd.DataFrame(data=data, columns=['Slope', 'Class'])

                      Slope                Class
0        0.1204778488753736                    A
1      -0.05555463166744862                    B
3       0.12801810567575655                    A
4      -0.05620886965822473                    B
...                     ...                  ...
1126    0.10525394490595655                    D
1127    0.10174103119847132                    E
1128   -0.03527457290513986                    C
1129  -0.035187264760902316                    D
1130   -0.03407274349346173                    E

sns.violinplot(data=data)

它显示:

enter image description here

我没办法尝试。大多数事情都以错误结尾:

Traceback (most recent call last):
  File "c:\Path\Slope Graphs.py", line 43, in <module>
    main(slopes1, slopes2)
  File "c:\Path\Slope Graphs.py", line 26, in main
    sns.violinplot(x='Class', y='Slope', data=data)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\seaborn\categorical.py", line 2384, in violinplot
    plotter = _ViolinPlotter(x, y, hue, data, order, hue_order,
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\seaborn\categorical.py", line 554, in __init__
    self.estimate_densities(bw, cut, scale, scale_hue, gridsize)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\seaborn\categorical.py", line 620, in estimate_densities
    kde, bw_used = self.fit_kde(kde_data, bw)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\seaborn\categorical.py", line 705, in fit_kde
    kde = stats.gaussian_kde(x, bw)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\scipy\stats\kde.py", line 209, in __init__
    self.set_bandwidth(bw_method=bw_method)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\scipy\stats\kde.py", line 565, in set_bandwidth
    self._compute_covariance()
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\scipy\stats\kde.py", line 574, in _compute_covariance
    self._data_covariance = atleast_2d(cov(self.dataset, rowvar=1,
  File "<__array_function__ internals>", line 5, in cov
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\lib\function_base.py", line 2422, in cov
    avg, w_sum = average(X, axis=1, weights=w, returned=True)
  File "<__array_function__ internals>", line 5, in average
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\lib\function_base.py", line 420, in average
    scl = wgt.sum(axis=axis, dtype=result_dtype)
  File "C:\...\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\core\_methods.py", line 38, in _sum
    return umr_sum(a, axis, dtype, out, keepdims, initial, where)
TypeError: No loop matching the specified signature and casting was found for ufunc add

0 个答案:

没有答案