Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Gráfico de mapa de calor de Python que muestra datos en días incorrectos (eje x)

Hola a todos.

Creé un mapa de calor de python en VSCode y mostró los datos correctamente (figura a continuación)

dfredp_0-1713782792415.png

Cuando utilicé el visual de Python e integré mi código en él, los datos comenzaron a unirse en el primer mes (año 2022 y 2023, figuras a continuación)

dfredp_1-1713782883520.png

dfredp_2-1713782929682.png

No sé si hay algo que ver con Power BI o con mi propio script de python, pero como he dicho, estaba mostrando los datos correctamente en VSCode. Traté de verificar problemas similares pero no pude encontrarlos en otras publicaciones.

Agradecería mucho su apoyo 🙂

Gracias

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Hola @dfredp ,

El objeto visual de Python en Power BI tiene esta limitación:
Los datos que usa el objeto visual de Python para trazar están limitados a 150.000 filas. Si se seleccionan más de 150.000 filas, solo se utilizan las 150.000 primeras filas y aparece un mensaje en la imagen. Los datos de entrada también tienen un límite de 250 MB.

Compruebe si se ha activado este límite.
Creación de objetos visuales de Power BI con Python en Power BI Desktop - Limitaciones

Saludos
Gao

Equipo de apoyo a la comunidad

Si hay alguna publicación que ayude, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Si no entiendo sus necesidades o aún tiene problemas al respecto, no dude en hacérnoslo saber. ¡Muchas gracias!

Cómo obtener respuestas rápidas a sus preguntas -- Cómo proporcionar datos de ejemplo en el foro de Power BI -- Grupo de usuarios de Power BI de China

Gracias por su ayuda, sin embargo, mi conjunto de datos solo tiene 10k filas, así que no creo que este sea el problema. Si esto pudiera ayudar, aquí está mi script de python: # Cole ou escreva o código do script aqui: import pandas as pd import numpy as np from scipy.interpolate import Rbf # Import Rbf for radial basis function interpolation import matplotlib.pyplot as plt import seaborn as sns from matplotlib.ticker import FuncFormatter # Eliminar filas en las que falta alguno de los datos o es infinito dataset = dataset.replace([np.inf, -np.inf], np.nan).dropna(subset=['Día', 'Profundidad', 'Temperatura']) # Eliminar valores de temperatura atípicos dataset.loc[dataset['Temperatura'] > 35, 'Temperatura'] = np.nan # Inicializar variables para todos los días en el rango de años seleccionados year_min = dataset['Año'].min() year_max = dataset['Año'].max() all_days = pd.date_range(start=f"{year_min}-01-01", end=f"{year_max}-12-31").date day_range = np.arange(1, len(all_days) + 1) depth_range = np.arange(np.floor(dataset['Depth'].min()), np.ceil(dataset['Depth'].max()) + 1) # Inicializar la cuadrícula con NaNs grid_z = np.full((len(depth_range), len(day_range)), np.nan) # Realizar la interpolación RBF diariamente para cada profundidad para el día en day_range: day_data = dataset[dataset['Day'] == day] if not day_data.empty: # Filtrar las filas con valores NaN en cualquier columna clave day_data = day_data.dropna(subset=['Depth', 'Temperatura']) points_y = day_data['Profundidad'] valores = day_data['Temperatura'] if len(points_y) > 2: # Asegúrese de que haya suficientes puntos para interpolar intente: rbf_interpolator = Rbf(points_y, values, function='linear', smooth=0.2) valid_depths = np.intersect1d(depth_range, np.round(points_y)) # Interpolar solo las profundidades disponibles grid_z[valid_depths.astype(int) - int(depth_range[0]), day - 1] = rbf_interpolator(valid_depths) except ValueError as e: print(f"Omitiendo la interpolación para el día {day} debido a datos insuficientes: {e}") # Crea el marco de datos para el mapa de calor heatmap_data = pd. DataFrame(grid_z, index=depth_range, columns=all_days) # Define una función para realizar la interpolación lineal de pequeños huecos en la definición de datos interpolate_small_gaps(data, max_gap=3): for depth_idx in range(data.shape[0]): # Iterar sobre cada profundidad series = data.iloc[depth_idx] is_na = series.isna() filled = series.copy() for start, group in is_na.groupby((is_na != is_na.shift()).cumsum()): if group.all(): # Si todo el grupo es True (NaNs) if len(group) <= max_gap: # Obtener los índices enteros del inicio y el final del gap start_idx = series.index.get_loc(group.index[0]) end_idx = series.index.get_loc(group.index[-1]) # Solo interpolamos si tenemos datos a ambos lados del gap if start_idx > 0 y end_idx < len(series) - 1: interp_range = slice(series.index[start_idx - 1], series.index[end_idx + 1]) filled[interp_range] = series[interp_range].interpolate() data.iloc[depth_idx] = datos de retorno rellenados # Aplicar la función de interpolación para rellenar pequeños huecos heatmap_data = interpolate_small_gaps(heatmap_data) # Función personalizada para formatear las etiquetas del eje x para mostrar solo meses en portugués def custom_formatter(x, pos): index = int(x) # Convertir a int para usar como índice si index < len(all_days): date = all_days[index - 1] # Ajustar para el índice de base cero if date.strftime('%d') == '01': # Primer día del mes # Mapeo de nombres de meses en inglés a portugués month_map = { 'Jan': 'Jan', 'Feb': 'Fev', 'Mar': 'Mar', 'Abr': 'Abr', 'May': 'Mai', 'Jun': 'Jun', 'Jul': 'Jul', 'Aug': 'Ago', 'Sep': 'Set', 'Oct': 'Out', 'Nov': 'Nov', 'Dec': 'Dez' } return month_map[date.strftime('%b')] return '' # Función personalizada para formatear las etiquetas del eje Y como enteros def int_formatter(x, pos): return '%d' % x # Trazar el mapa de calor plt.figure(figsize=(20, 8)) heatmap = sns.heatmap(heatmap_data, cmap='jet', cbar_kws={'label': 'Temperatura (°C)'}, vmin=0, vmax=30) # Utilice la función custom_formatter al configurar las etiquetas x-tick heatmap.set_xticks(np.arange(len(all_days))) mapa de calor. set_xticklabels([custom_formatter(x, None) for x in range(1, len(all_days) + 1)], rotation=90) # Añade las líneas punteadas verticales y ajusta su estilo en función del día para el día, date in enumerate(all_days, start=1): if date.day in [5, 10, 15, 20, 25]: plt.axvline(x=day - 1, color='grey', linestyle=':', linewidth=1) # Línea más gruesa para los días especificados if date.day == 1: plt.axvline(x=día - 1, color='negro', linestyle=':', linewidth=1) # Línea más gruesa para el primer día del mes else: plt.axvline(x=día - 1, color='grey', linestyle=':', linewidth=0.5) plt.xlabel('Dia e Mês', fontsize=15) plt.ylabel('Profundidade (m)', fontsize=15) # Aplica el formateador personalizado al eje y plt.gca().yaxis.set_major_formatter(FuncFormatter(int_formatter)) plt.tight_layout() plt.show()

Syndicate_Admin
Administrator
Administrator

@dfredp

Parece que el problema que está encontrando podría estar relacionado con la forma en que se procesan o visualizan los datos dentro del script de Python cuando se integran en Power BI.

Estas son algunas de las posibles razones por las que podrías ver resultados diferentes:

1. **Procesamiento de datos**: Compruebe si los pasos de procesamiento de datos en su script de Python son los mismos cuando se integran en Power BI que en VSCode. Asegúrese de que los datos se leen y procesan correctamente, incluidas las transformaciones o agregaciones que puedan afectar al mapa de calor.

2. **Estructura de datos**: compruebe que la estructura de los datos que se pasan al script de Python en Power BI es la misma que los datos que usó en VSCode. Las diferencias en la estructura o el formato de los datos podrían dar lugar a resultados inesperados.

3. **Configuración de visualización**: Revise la configuración de la visualización del mapa de calor en su script de Python. Compruebe si hay alguna configuración o parámetro que pueda necesitar ajustes para que muestre los datos correctamente dentro de Power BI.

4. **Diferencias de entorno**: Tenga en cuenta las diferencias en el entorno entre VSCode y Power BI que puedan afectar a la ejecución del script de Python. Esto podría incluir diferencias en las versiones de Python, dependencias de paquetes u otros factores ambientales.

5. **Control de errores**: agregue el control de errores a su script de Python para detectar cualquier problema potencial que pueda surgir durante la ejecución dentro de Power BI. Esto puede ayudar a identificar y solucionar cualquier error que pueda estar ocurriendo.

Al revisar minuciosamente estos aspectos y comparar el comportamiento del script de Python en VSCode con el de Power BI, debería poder identificar y abordar la causa raíz de la discrepancia en la visualización del mapa de calor.

¿He respondido a tu pregunta? ¡Marca mi publicación como una solución! ¡¡Agradezco sus felicitaciones!!

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors