Colorear el fondo de una parcela Seaborn utilizando una columna en la trama de datos

SK:

Pregunta

Como sombrear o colorear el fondo de un Seaborn trama usando una columna de una trama de datos ?

Fragmento de código

import numpy as np
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri")
fmri.sort_values('timepoint',inplace=True)
ax = sns.lineplot(x="timepoint", y="signal", data=fmri)
arr = np.ones(len(fmri))
arr[:300] = 0
arr[600:] = 2
fmri['background'] = arr

ax = sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri)

Que produjo este gráfico:
La salida real

Salida deseada

Lo que me gustaría tener, de acuerdo con el valor en la nueva columna 'background'y cualquier paleta o de usuario definido colores , algo como esto:

Salida deseada

jjsantoso :

ax.axvspan() podría funcionar para usted, suponiendo que los fondos no se superponen sobre los puntos de tiempo.

import numpy as np
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri")
fmri.sort_values('timepoint',inplace=True)
arr = np.ones(len(fmri))
arr[:300] = 0
arr[600:] = 2
fmri['background'] = arr
fmri['background'] = fmri['background'].astype(int).astype(str).map(lambda x: 'C'+x)

ax = sns.lineplot(x="timepoint", y="signal", hue="event", data=fmri)
ranges = fmri.groupby('background')['timepoint'].agg(['min', 'max'])
for i, row in ranges.iterrows():
    ax.axvspan(xmin=row['min'], xmax=row['max'], facecolor=i, alpha=0.3)

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=379703&siteId=1
Recomendado
Clasificación