Seaborn:我可以在带有 dodge=True 的条形图中添加“第二色调”(或类似的)吗

问题描述 投票:0回答:1

假设我有一个如下所示的情节:

import numpy as np
df = sns.load_dataset('iris')
dfm = pd.melt(df, id_vars=["species"])
dfm = dfm.query('variable in ["sepal_length", "sepal_width"]')
sns.stripplot(data=dfm, x="species", y="value", hue="variable", dodge=True)
plt.legend(bbox_to_anchor=(1.05, 1), loc=2)

在此输入图片描述

我们还假设我的数据中还有另一列包含重要信息,例如“效力”。

dfm['potency'] = np.random.randint(1, 6, dfm.shape[0])

我想用变暗的颜色突出显示与图中每个点相对应的效力(高效力 -> 更暗)。这可能吗?

我知道

hue='potency'
会这样做,但是我无法使用
dodge
将数据分成 sepal_width 和 sepal_length 块。

python seaborn
1个回答
0
投票

您可以使用不同的 alpha 覆盖多个带状图:

start, end = dfm['potency'].agg(['min', 'max'])
for k, v in dfm.groupby('potency'):
    sns.stripplot(data=v.assign(variable=v['variable']+f' / potency={k}'),
                  x="species", y="value", hue="variable", dodge=True,
                  alpha=(k-start+1)/(end-start+1)
                 )
plt.legend(bbox_to_anchor=(1.05, 1), loc=2)

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.