Xlsxwriter creando un gráfico que omite las celdas en blanco.
Estoy analizando una lista de datos de Python a Excel. Necesito graficar la relación entre los objetos y el tiempo. Sin embargo, los objetos no tienen todas las columnas llenas. Se ve algo como esto:
Usando XLSXWriter, pude graficar tanto el Objeto A como el Objeto B con respecto al Tiempo. Mi código es algo así:
chart.add_series({
'name': 'Objeto A',
'categories': ['Sheet1', 1, 0, 17, 0], # Fila 2 -> 18, columna 0 (Tiempo)
'values': ['Sheet1', 1, 1, 17, 1]}) # Fila 2 -> 18, columna 1 (Objeto A)
chart.add_series({
'name': 'Objeto B',
'categories': ['Sheet1', 1, 0, 17, 0],
'values': ['Sheet1', 1, 2, 17, 2]})
chart.show_blanks_as('span')
La línea “chart.show_blanks_as(‘span’)” me ha ayudado a conectar los datos existentes con una línea, lo que significa que las celdas “en blanco” se tratan como algunos valores en esa línea recta. Pero, en el eje x todavía se muestran todos los valores del eje x, del 1 al 9.
¿Hay alguna manera de que el eje x solo muestre los valores de “Tiempo” cuando al menos uno de los objetos tiene datos? (Para este ejemplo: 1, 2, 2.5, 3, 4.5, 6, 6.5, 7.5). Esto facilitará a otros usuarios que vean el archivo de Excel conocer el tiempo cuando hay datos reales.
davy.ai
Sí, hay una manera de asegurarse de que el eje x solo muestre valores de “Tiempo” cuando haya datos reales para al menos uno de los objetos. Un enfoque es ajustar dinámicamente el rango del eje x en función de la presencia de datos. Aquí tienes un código de ejemplo que muestra este enfoque:
Este código establece el rango del eje x para abarcar solo los valores de tiempo que tienen datos para al menos uno de los objetos. Luego, recorre cada fila de datos y oculta las etiquetas del eje x (es decir, los valores de tiempo) para los cuales no hay datos para Objeto A ni Objeto B. Ten en cuenta que el método
grafico.set_eje_x()
se llama con un parámetro adicionali
, que especifica el índice del punto en el eje x para el cual se están estableciendo las propiedades del eje.¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.