matplotlib 如何在小提琴图上画点?

x33g5p2x  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(172)

我有四个Pandas系列,我用小提琴的情节,他们如下:

import seaborn
seaborn.violinplot([X1['total'], X2['total'], X3['total'], X4['total']])

我想在小提琴图的顶部绘制值,所以我添加了:

seaborn.stripplot([X1['total'], X2['total'], X3['total'], X4['total']])

但这给出:

它画出了第一小提琴图上的所有点。
我哪里做错了?

kcrjzv8t

kcrjzv8t1#

目前(海运0.12.1),sns.violinplot似乎接受列表的列表作为数据,并将其解释为类似于宽格式的 Dataframe 。然而,sns.striplot(以及sns.swarmplot)将其解释为单个数据集。
另一方面,sns.stripplot接受一个列表字典,并将其解释为一个宽格式的 Dataframe ,但sns.violinplot拒绝使用该字典。
请注意seaborn正在积极地进行内部修改,以允许更广泛的数据格式集,因此未来的版本之一将解决这个问题。
因此,小提琴图的列表列表和条形图的字典允许将两者结合起来:

import seaborn as sns
import pandas as pd
import numpy as np

X1, X2, X3, X4 = [pd.DataFrame({'total': np.random.normal(.1, 1, np.random.randint(99, 300)).cumsum()})
                  for _ in range(4)]

ax = sns.violinplot([X1['total'], X2['total'], X3['total'], X4['total']], inner=None)
sns.stripplot({0: X1['total'], 1: X2['total'], 2: X3['total'], 3: X4['total']},
              edgecolor='black', linewidth=1, palette=['white'] * 4, ax=ax)

相关问题