python - Seaborn violinplot 中 HUE 参数的多列
问题描述
我正在使用提示数据集,这里是数据集的负责人。
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
我的代码是
sns.violinplot(x='day',y='total_bill',data=tips, hue=['sex','smoker'])
我想要一个带有total_bill 的小提琴图,其中色调是性和吸烟者,但我找不到任何设置多个值的选项hue
。有什么办法吗?
解决方案
在这种情况下,接受的答案建议的分面方法可能更好,但可能不容易适用于其他类型的 Seaborn 图(例如,在我的情况下ecdfplot
)。所以我只是想分享一下,我想出了一个解决方案,它可以满足 OP 最初的要求,即实际上使用多个列作为hue
参数。
诀窍是色调可以是列名,也可以是与数据长度相同的序列,列出要分配每个数据点的颜色类别。所以...
sns.violinplot(x='day', y='total_bill', data=tips, hue='sex')
...基本上与以下内容相同:
sns.violinplot(x='day', y='total_bill', data=tips, hue=tips['sex'])
您通常不会使用后者,它只是为了实现相同的目的而需要更多的输入 - 除非您想即时构建自定义序列:
sns.violinplot(x='day', y='total_bill', data=tips,
hue=tips[['sex', 'smoker']].apply(tuple, axis=1))
您构建传递的序列的方式hue
完全取决于您,唯一的要求是它必须与您的数据具有相同的长度,并且如果是类似数组的,它必须是一维的,所以您不能只是通过hue=tips[['sex', 'smoker']]
,你必须以某种方式将列连接成一个。我选择tuple
了最通用的方式,但是如果您想对格式有更多的控制权,请构建一个Series
字符串(在此处将其保存到一个单独的变量中以提高可读性,但您不必这样做):
hue = tips['sex'].astype(str) + ', ' + tips['smoker'].astype(str)
sns.violinplot(x='day', y='total_bill', data=tips, hue=hue)
推荐阅读
- javascript - 单击从 ajax 调用的结果中选择(无 jquery)
- javascript - 在 JavaScript 中将 Promise 的结果合并到一个数组中
- javascript - Cannot save object in localStorage
- godot - 为什么我的 path2d 位置没有更新?
- bash - 将 ${} 占位符解析为 shell 脚本中的绝对路径
- javascript - 当我有可重用的反应组件、父组件或子组件(可重用组件)时,在 React 中的何处获取数据
- r - 热图:如何仅对行进行聚类并保持热图列标签的顺序与 df 中的相同?
- javascript - Firestore 无法获取空文档
- python - Proflie 多线程 python 应用程序
- dask - 在复制 dask.dataframe 时需要清晰