Cum pentru a seta o altă linestyle pentru fiecare nuanță de grup într-un kdeplot / displot

0

Problema

  • Cum poate fiecare hue un grup de seaborn.kdeplotsau seaborn.displot cu kind='kde' fi dat un alt linestyle?
    • Ambele axe-nivel și figura-opțiuni de nivel va accepta o str pentru linestyle/ls, care se aplică la toate hue grupuri.
import seaborn as sns
import matplotlib.pyplot as plt

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

# convert data to long form
im = iris.melt(id_vars='species')

# axes-level plot works with 1 linestyle
fig = plt.figure(figsize=(6, 5))
p1 = sns.kdeplot(data=im, x='value', hue='variable', fill=True, ls='-.')

# figure-level plot works with 1 linestyle
p2 = sns.displot(kind='kde', data=im, x='value', hue='variable', fill=True, ls='-.')
  • kdeplot

enter image description here

  • displot

enter image description here

Revizuite Întrebări

matplotlib python seaborn
2021-11-23 23:49:56
1

Cel mai bun răspuns

1
  • Cu fill=True obiectul de actualizare este în .collections
  • Cu fill=False obiectul de actualizare este în .lines
  • Actualizarea legenda este destul de simplu:
    • handles = p.legend_.legendHandles[::-1] extracte și inversează legenda mânere. Acestea sunt inversate pentru a actualiza, deoarece acestea sunt, în ordine inversă, în care intriga linestyle este actualizat
    • Rețineți că figura nivel de parcele extract de legenda cu ._legend, cu axele la nivel de parcele de utilizare .legend_.
  • Testat în python 3.8.12, matplotlib 3.4.3, seaborn 0.11.2

kdeplot: axe-nivel

  • Extrage și de a repeta prin .collections sau .lines din axes obiect și de a folosi .set_linestyle

fill=True

fig = plt.figure(figsize=(6, 5))
p = sns.kdeplot(data=im, x='value', hue='variable', fill=True)

lss = [':', '--', '-.', '-']

handles = p.legend_.legendHandles[::-1]

for line, ls, handle in zip(p.collections, lss, handles):
    line.set_linestyle(ls)
    handle.set_ls(ls)

enter image description here

fill=False

fig = plt.figure(figsize=(6, 5))
p = sns.kdeplot(data=im, x='value', hue='variable')

lss = [':', '--', '-.', '-']

handles = p.legend_.legendHandles[::-1]

for line, ls, handle in zip(p.lines, lss, handles):
    line.set_linestyle(ls)
    handle.set_ls(ls)

enter image description here

displot: figura nivel

  • Similar cu axele la nivel de parcelă, dar fiecare axe trebuie să fie reperabile prin
  • Legenda handles ar putea fi actualizate în for line, ls, handle in zip(ax.collections, lss, handles), dar care se aplică actualizarea pentru fiecare subplot. Prin urmare, o buclă separată este creat pentru a actualiza legenda handles doar o singură dată.

fill=True

g = sns.displot(kind='kde', data=im, col='variable', x='value', hue='species', fill=True, common_norm=False, facet_kws={'sharey': False})

axes = g.axes.flat

lss = [':', '--', '-.']

for ax in axes:
    for line, ls in zip(ax.collections, lss):
        line.set_linestyle(ls)
        
handles = g._legend.legendHandles[::-1]
for handle, ls in zip(handles, lss):
    handle.set_ls(ls)

enter image description here

fill=False

g = sns.displot(kind='kde', data=im, col='variable', x='value', hue='species', common_norm=False, facet_kws={'sharey': False})

axes = g.axes.flat

lss = [':', '--', '-.']

for ax in axes:
    for line, ls in zip(ax.lines, lss):
        line.set_linestyle(ls)
        
handles = g._legend.legendHandles[::-1]
for handle, ls in zip(handles, lss):
    handle.set_ls(ls)

enter image description here

2021-11-24 01:26:37

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................