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.

Cómo trazar pares de 2 ndarrays con el mismo color (discontinuo y sólido) con matplotlib.pyplot?

Tengo 2 ndarrays A y B que contienen 3 columnas cada uno. Las columnas de A y B corresponden y me gustaría trazar cada columna correspondiente de A y B como líneas del mismo color, una discontinua y otra sólida. Tengo este fragmento de código, pero por supuesto en el segundo comando plot(), pyplot continúa con el siguiente color en el mapa de colores:

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0, 10, 1)
A = np.array([[1] * 10, [5] * 10, [10] * 10])
B = np.array([[4] * 10, [20] * 10, [40] * 10])

plt.figure(1)
plt.plot(t, A.T, label=['A_1', 'A_2', 'A_3'])
plt.plot(t, B.T, linestyle='--', label=['B_1', 'B_2', 'B_3'])
plt.legend()
plt.show()

Me gustaría forzar a pyplot.plot() a comenzar de nuevo con el primer color del mapa de colores o cualquier otra forma agradable de lograr el resultado deseado. Podría trazar iterando sobre las columnas de ambos ndarrays y establecer colores específicos para cada iteración, pero me parece que debería haber una solución más corta y elegante. ¿Alguna idea al respecto? ¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para trazar cada columna correspondiente de A y B como líneas en el mismo color, una línea punteada y otra sólida, podemos usar el parámetro “color” de la función “plot()” en lugar de depender del mapa de colores. Aquí está el código modificado:

    import matplotlib.pyplot as plt
    import numpy as np
    
    t = np.arange(0, 10, 1)
    A = np.array([[1] * 10, [5] * 10, [10] * 10])
    B = np.array([[4] * 10, [20] * 10, [40] * 10])
    
    plt.figure(1)
    colors = ['blue', 'orange', 'green']  # especificar colores para cada línea
    linestyles = ['-', '--', '-.']  # especificar estilos de línea para cada línea
    for i in range(A.shape[0]):
        plt.plot(t, A[i], color=colors[i], linestyle=linestyles[0],
                 label=f'A{i+1}')  # trazar líneas sólidas para A
        plt.plot(t, B[i], color=colors[i], linestyle=linestyles[1],
                 label=f'B{i+1}')  # trazar líneas punteadas para B
    plt.legend()
    plt.show()
    

    Aquí, creamos dos listas colors y linestyles para especificar los colores y estilos de línea para cada línea. Luego, recorremos las filas de A (o B, ya que tienen la misma forma) y trazamos cada línea por separado, utilizando el color y el estilo de línea correspondientes de las listas. También establecemos el parámetro label para crear una leyenda.

    Esto resultará en un gráfico con cada columna correspondiente de A y B mostrada en el mismo color, con una línea punteada y la otra sólida.

    plot

Comments are closed.