Jak nastavit jiný linestyle pro každý odstín skupiny v kdeplot / displot

0

Otázka

  • Jak může každý hue skupina seaborn.kdeplotnebo seaborn.displot s kind='kde' být jiný linestyle?
    • Oba os-level a postava-úroveň volby budou akceptovat str pro linestyle/ls, které platí pro všechny hue skupin.
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

Přezkoumat Otázky

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

Nejlepší odpověď

1
  • S fill=True předmětem aktualizace je v .collections
  • S fill=False předmětem aktualizace je v .lines
  • Aktualizace legend je poměrně jednoduchý:
    • handles = p.legend_.legendHandles[::-1] extrakty a obrátí legenda zpracovává. Jsou obrácené, aby aktualizace, protože jsou v opačném pořadí, ve kterém se děj linestyle je aktualizován
    • Všimněte si, že číslo-úroveň pozemky extrakt legenda s ._legends os-úrovni pozemky použití .legend_.
  • Testováno v python 3.8.12, matplotlib 3.4.3, seaborn 0.11.2

kdeplot: os-level

  • Extrakt a iterovat .collections nebo .lines z axes objekt a použít .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: obrázek-úroveň

  • Podobný os-úrovni spiknutí, ale každý os musí být iterated prostřednictvím
  • Legenda handles mohl být aktualizován v for line, ls, handle in zip(ax.collections, lss, handles), ale to se vztahuje na aktualizace pro každý subplot. Proto, samostatná smyčka je vytvořen, aby aktualizace legenda handles pouze jednou.

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

V jiných jazycích

Tato stránka je v jiných jazycích

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