es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python Matplotlib, zorder no funciona en gráfico combinado.

He leído muchos artículos aquí sobre este problema. Sin embargo, ninguna de las soluciones me ayudó con mi problema. Así que por favor permítanme reabrir este problema.

Estoy tratando de mostrar un gráfico de líneas y un gráfico de barras en un solo gráfico. Ver la imagen aquí. Sin embargo, no puedo obtener la cuadrícula horizontal “debajo” de ambos gráficos a pesar de que tengo correctamente configurado el parámetro zorder. Leí en algún lugar que solo necesitas probar diferentes valores para zorder. He probado cientos de ellos, pero fallé.

No escribiré todo el código aquí, solo las partes relevantes:


<h1>GRÁFICO DE LÍNEA</h1> fig, ax1 = plt.subplots(figsize=(12,6)) ax1.plot(mdates.date2num(df<em>exchangerate</em>FINAL['Date']), df<em>exchangerate</em>FINAL["LINE"]) ax1.grid(axis='y', color='gray', visible = True, zorder = 0, linewidth=0.4) ax1.set<em>zorder(3)<br> ax1.patch.set</em>visible(False) <h1>GRÁFICO DE BARRAS</h1> ax2 = ax1.twinx() rects1 = ax2.bar(mdates.date2num(df<em>operations</em>FINAL["Date"]) - X, df<em>operations</em>FINAL["BAR1"]) rects2 = ax2.bar(mdates.date2num(df<em>operations</em>FINAL["Date"]) + X, df<em>operations</em>FINAL["BAR2"]) all<em>dates = sorted(df</em>operations<em>FINAL['Date'][::F].tolist()) all<em>dates = mdates.date2num(all<em>dates) ax2.set</em>xticks(all<em>dates) ax2.set</em>xticklabels([mdates.num2date(d).strftime('%#m/%y') for d in all<em>dates]) ax2.set</em>zorder(2)

El gráfico deseado para mí es aquel en el que habrá una cuadrícula en segundo plano, luego un gráfico de barras y un gráfico de líneas en primer plano.

Este es un problema bastante crítico para mí, así que estaría muy agradecido por cualquier ayuda -> ¿qué debo usar y dónde debo colocarlo en el código? ¡Muchas gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para mostrar gráficos de líneas y barras con cuadrícula

    Según el código proporcionado, parece que los valores de zorder están configurados correctamente, pero el problema puede estar relacionado con la visibilidad de las cuadrículas del eje.

    Prueba estableciendo ax2.grid(False) para desactivar las líneas de la cuadrícula del gráfico de barras vertical, y agrega ax1.grid(False) para desactivar las líneas de la cuadrícula del gráfico de líneas. Luego, establece ax1.grid(True) para activar las líneas de la cuadrícula horizontal para ambos gráficos.

    Además, puedes ajustar el ancho de las líneas de la cuadrícula horizontal aumentando su valor. Prueba con linewidth=0.8 o más en ax1.grid().

    Aquí está el código actualizado:

    #GRÁFICO DE LÍNEA
    fig, ax1 = plt.subplots(figsize=(12,6))
    ax1.plot(mdates.date2num(df_exchangerate_FINAL['Date']), df_exchangerate_FINAL["LINE"])
    ax1.grid(axis='y', color='gray', visible=True, zorder=0, linewidth=0.8)
    ax1.grid(axis='x', color='gray', visible=True, zorder=0, linewidth=0.8)
    ax1.set_zorder(3)  
    ax1.patch.set_visible(False)
    ax1.grid(True)
    
    #GRÁFICO DE BARRAS
    ax2 = ax1.twinx()
    rects1 = ax2.bar(mdates.date2num(df_operations_FINAL["Date"]) - X, df_operations_FINAL["BAR1"])
    rects2 = ax2.bar(mdates.date2num(df_operations_FINAL["Date"]) + X, df_operations_FINAL["BAR2"])
    all_dates = sorted(df_operations_FINAL['Date'][::F].tolist()) 
    all_dates = mdates.date2num(all_dates)
    ax2.set_xticks(all_dates)
    ax2.set_xticklabels([mdates.num2date(d).strftime('%#m/%y') for d in all_dates])
    ax2.set_zorder(2)
    ax2.grid(False)
    

    Espero que esta solución funcione para ti. ¡Avísame si tienes alguna pregunta o problema adicional!

Comments are closed.