如何为 sns.pairplot 中绘制的 kde 色调组设置线型

How to set the linestyle for kde hue groups plotted in a sns.pairplot

我在对角线位置使用密度图的 pairplot,但不同组的线条样式相同。有没有办法为不同的组使用不同的线条样式?

感谢任何帮助!

import seaborn as sns
import matplotlib.pyplot as plt

iris = sns.load_dataset("iris")

g = sns.pairplot(iris, kind="scatter", 
                 hue = 'species', 
                 diag_kind='auto',
                 diag_kws={'bw_adjust':.03, 'linestyle':['solid','dotted', 'dashed', 'dashdot']},
                 # this does not work with error: Unrecognized linestyle: ['solid', 'dotted', 'dashed', 'dashdot'], same for: {'solid','dotted', 'dashed', 'dashdot'}
                 #diag_kws={'bw':.03, 'linestyle':'dotted'} # this works but has identical line style for species.
                )
plt.show()
  • 'linestyle':' dotted' 是预期的行为 g = sns.pairplot(iris, kind="scatter", hue='species', diag_kind='kde', diag_kws={'bw_adjust':.1, 'ls': 'dotted'})。无法设置具有多个值的 ls/linestyle 参数。
  • @JohanC 的评论所述,关键是使用 g.diag_axes 而不是 axes[[0, 5, 10, 15]] 正确提取对角轴对象。
    • 更正此问题后, 可以正常工作。
import seaborn as sns

# load the data
iris = sns.load_dataset("iris")

g = sns.pairplot(iris, diag_kind='kde', hue='species', diag_kws={'fill': False})

diag = g.diag_axes

lss = ['dotted', 'dashed', 'dashdot']

for ax in diag:
   
    for line, ls in zip(ax.lines, lss):
        line.set_linestyle(ls)