如何用非分类数据绘制 "grouped scatterplot"?

How to plot a "grouped scatterplot" with non-categorical data?

当这些数据没有 "categorical" 标签时,我有点困惑如何使用 seaborn.stripplot() 绘制多列数据点。

例如,用户可以绘制 "grouped" 散点图如下,使用 tips 数据集:

import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

import seaborn as sns

tips = sns.load_dataset("tips")   # internal dataset

print(tips)

     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
5         25.29  4.71    Male     No   Sun  Dinner     4
....      .....      .....      .....

有按类别 day 分组在一起的测量值,由此我们生成散点图如下:

sns.stripplot(x="day", y="total_bill", data=tips)

现在,我想用非分类数据重新制作这个 "grouped scatterplot format" 图,每列都有数据:

df = pd.read_csv("my_data.csv")

df

      total_bill_A   total_bill_B    total_bill_C   total_bill_D      
0     16.99          21.01           15.99          14.50  
1     10.34          21.66           12.99          16.50  
2     21.01          23.50           7.25           17.50   
3     23.68          23.31           9.99           12.50 
4     24.59          23.61           10.00          15.50  
5     25.29          24.71           11.00          19.50   
....               ....

这里的 y 轴是 price,x 轴应该是这些列中的每一列,total_bill_Atotal_bill_Btotal_bill_C 和 [=21] =],类似于上面的周四、周五、周六、周日。

我怎么能画出这样的东西seabornseaborn.stripplot() 可以做到这一点吗?

您可以 melt 数据框并相应地命名参数以应用于 stripplot,如下所示:

df_strip = pd.melt(df, var_name='total_bill', value_name='price')
sns.stripplot(x="total_bill", y="price", data=df_strip)