• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

372
Vistas
Trazado de la región de incertidumbre sombreada en un gráfico de líneas en matplotlib cuando los datos tienen NaN

Me gustaría una trama que se vea así: parcela con incertidumbre

Estoy tratando de hacer esto con matplotlib:

 fig, ax = plt.subplots() with sns.axes_style("darkgrid"): for i in range(5): ax.plot(means.ix[i][list(range(3,104))], label=means.ix[i]["label"]) ax.fill_between(means.ix[i][list(range(3,104))]-stds.ix[i][list(range(3,104))], means.ix[i][list(range(3,104))]+stds.ix[i][list(range(3,104))]) ax.legend()

Quiero que la región sombreada sea del mismo color que la línea del centro. Pero en este momento, mi problema es que means que tiene algunos NaN y fill_between no lo acepta. me sale el error

TypeError: ufunc 'isfinite' no es compatible con los tipos de entrada, y las entradas no se pueden coaccionar de forma segura a ningún tipo compatible de acuerdo con la regla de conversión "segura".

¿Alguna idea sobre cómo podría lograr lo que quiero? La solución no necesita usar matplotlib siempre que pueda trazar mi serie de puntos con sus incertidumbres para series múltiples.

almost 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Está bien. Así que uno de los problemas era que el dtype de mis datos era object y no float y esto causó que fill_between fallara cuando miraba para ver si los números eran finitos. Finalmente logré hacerlo (a) convirtiéndolo en float y luego (b) resolviendo el problema de los colores coincidentes para la incertidumbre y la línea, para usar una paleta de colores. Así que tengo:

 import seaborn as sns import numpy as np import matplotlib.pyplot as plt import pandas as pd fig, ax = plt.subplots() clrs = sns.color_palette("husl", 5) with sns.axes_style("darkgrid"): epochs = list(range(101)) for i in range(5): meanst = np.array(means.ix[i].values[3:-1], dtype=np.float64) sdt = np.array(stds.ix[i].values[3:-1], dtype=np.float64) ax.plot(epochs, meanst, label=means.ix[i]["label"], c=clrs[i]) ax.fill_between(epochs, meanst-sdt, meanst+sdt ,alpha=0.3, facecolor=clrs[i]) ax.legend() ax.set_yscale('log')

lo que me dio el siguiente resultado: ingrese la descripción de la imagen aquí

almost 3 years ago · Santiago Trujillo Denunciar

0

¿Podría simplemente eliminar los NaNs de su marco de datos de means y trazar ese marco de datos resultante en su lugar?

En el siguiente ejemplo, traté de acercarme a su estructura, tengo un DataFrame de means con algo de NaN esparcido. Supongo que stds DataFrame probablemente tenga NaN en las mismas ubicaciones, pero en este caso realmente no importa, dejo caer NaN de los means para obtener temp_means y uso los índices que quedan en temp_means para extraer los valores estándar de stds .

Los gráficos muestran los resultados antes (arriba) y después (abajo) de dejar caer los NaN s

 x = np.linspace(0, 30, 100) y = np.sin(x/6*np.pi) error = 0.2 means = pd.DataFrame(np.array([x,y]).T,columns=['time','mean']) stds = pd.DataFrame(np.zeros(y.shape)+error) #sprinkle some NaN in the mean sprinkles = means.sample(10).index means.loc[sprinkles] = np.NaN fig, axs = plt.subplots(2,1) axs[0].plot(means.ix[:,0], means.ix[:,1]) axs[0].fill_between(means.ix[:,0], means.ix[:,1]-stds.ix[:,0], means.ix[:,1]+stds.ix[:,0]) temp_means = means.dropna() axs[1].plot(temp_means.ix[:,0], temp_means.ix[:,1]) axs[1].fill_between(temp_means.ix[:,0], temp_means.ix[:,1]-stds.loc[temp_means.index,0], temp_means.ix[:,1]+stds.loc[temp_means.index,0]) plt.show()

ingrese la descripción de la imagen aquí

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda