Ahm*_*nis 15 python visualization matplotlib pandas seaborn
我正在使用提示数据集,这是数据集的头部。
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
Run Code Online (Sandbox Code Playgroud)
我的代码是
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
Run Code Online (Sandbox Code Playgroud)
我想要一个带有 Total_bill 的一天小提琴图,其中色调是性别和吸烟者,但我找不到任何选项来设置 的多个值hue。有什么办法吗?
dlu*_*kes 23
在这种情况下,接受的答案建议的分面方法可能更好,但可能不容易适用于其他类型的 Seaborn 图(例如在我的例子中,ecdfplot)。所以我只是想分享我找到了一个解决方案,该解决方案可以满足OP最初的要求,即实际上使用多个列作为参数hue。
诀窍在于,色调可以是列名称,也可以是与数据长度相同的序列,列出要分配每个数据点的颜色类别。所以...
sns.violinplot(x='day', y='total_bill', data=tips, hue='sex')
Run Code Online (Sandbox Code Playgroud)
...基本上与以下相同:
sns.violinplot(x='day', y='total_bill', data=tips, hue=tips['sex'])
Run Code Online (Sandbox Code Playgroud)
您通常不会使用后者,只是需要更多的输入来实现相同的效果 - 除非您想动态构建自定义序列:
sns.violinplot(x='day', y='total_bill', data=tips,
hue=tips[['sex', 'smoker']].apply(tuple, axis=1))
Run Code Online (Sandbox Code Playgroud)
构建传递的序列的方式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)
Run Code Online (Sandbox Code Playgroud)
您可以使用 aseaborn.catplot来使用'sex'ashue和'smoker'as 列来生成两个并排的小提琴图。
检查这个代码:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
tips = sns.load_dataset("tips")
sns.catplot(x = "day",
y = "total_bill",
hue = "sex",
col = "smoker",
data = tips,
kind = "violin",
split = True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给了我这个情节:
| 归档时间: |
|
| 查看次数: |
17309 次 |
| 最近记录: |