首页 > 解决方案 > 使用连续行作为 Y 轴的小提琴图

问题描述

我正在尝试构建以下数据(CSV)的小提琴图:

,Exp No.,Sensory accuracy(mm),Volume of Data points,Exp 1,Exp 2,Exp 3,Exp 4,Exp 5,Exp 6,Exp 7,Exp 8,Exp 9,Exp 10,Coefficient ,PPIP
0,1,10,3,9948,9998,9961,10042,10049,10029,9975,10020,9986,10002,34.07508050043479,0.4231902824036948
1,2,10,5,10012,10021,9991,10013,9993,10010,9995,9992,10007,10008,10.591401124392268,0.7024168537963643
2,3,10,7,10015,10002,9999,10013,10013,9995,10005,10007,10003,10016,7.223418704310154,0.7758332605676019
3,4,10,10,10019,10006,10006,10013,9995,10007,9996,10014,10002,10004,7.627435858647242,0.766226316659029
4,5,10,15,10010,10012,10014,10010,10014,10018,10006,10006,10009,10010,3.7252889522529364,0.8703132644393902
5,6,15,3,9972,10041,9953,10049,10005,9968,9978,10016,10054,10011,36.0248371112055,0.40966926227828393

在图像中可能更容易看到

数据集图片

X 轴表示“传感器精度”和“数据点量”列。

对于每个 X 参数,我想找到一种方法让 Y 轴由 Exp 1-10 中的数据表示。

有没有一种简单的方法可以在不将表格重新格式化为单独的实验行的情况下做到这一点?

标签: pythonpandasmatplotlibplotlyviolin-plot

解决方案


这个问题是模棱两可的。我会尽力;

数据

在此处输入图像描述

应用df.melt将 df 从宽格式转为长格式并获取绘制小提琴图所需的列

df2=pd.melt(df, id_vars=['Sensory','volume'], value_vars=['Exp1', 'Exp2', 'Exp3', 'Exp4', 'Exp5', 'Exp6', 'Exp7', 'Exp8', 'Exp9', 'Exp10'])

结果

在此处输入图像描述

情节小提琴。

Violin 取三个变量x=variable 1, y=variable 2,如果它有两个不同的元素,可以用hue=variable 3where by来分类'group byvariable 3split=True

你不是太确定。我将其绘制如下。如果需要,我们可以改进。

未分组:

ax = sns.violinplot(x="variable", y="value", hue="Sensory", data=df2, palette="muted")

如果您需要将其分组Sensory

ax = sns.violinplot(x="variable", y="value", hue="Sensory", split=True, data=df2, palette="muted")

推荐阅读