假设我有一个如下所示的情节:
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 块。
您可以使用不同的 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)
输出: