Tengo un bucle donde puedo crear algunas parcelas y necesito marcador único para cada parcela. Creo que acerca de la creación de la función, que devuelve al azar símbolo, y la uso en mi programa de esta manera:

for i in xrange(len(y)):
    plt.plot(x, y [i], randomMarker())

pero creo que de esta manera no es buena.
Necesito esto para distinguir las parcelas en la leyenda, debido a que las parcelas no debe ser conectado con las líneas, que debe ser justo conjuntos de puntos.

  • En realidad a lo que necesita cada marcador a ser diferente, o no desea que sus puntos a no ser conectados por una línea?
  • Necesito cada marcador a ser diferente y quieres puntos a no ser conectados por líneas.
InformationsquelleAutor user983302 | 2012-10-26

4 Comentarios

  1. 67

    itertools.cycle va a iterar a través de una lista o tupla de forma indefinida. Esto es preferible a una función que selecciona aleatoriamente marcadores para usted.

    Python 2.x

    import itertools
    marker = itertools.cycle((',', '+', '.', 'o', '*')) 
    for n in y:
        plt.plot(x,n, marker = marker.next(), linestyle='')

    Python 3.x

    import itertools
    marker = itertools.cycle((',', '+', '.', 'o', '*')) 
    for n in y:
        plt.plot(x,n, marker = next(marker), linestyle='')

    Se puede utilizar para producir una trama como esta (Python 2.x):

    import numpy as np
    import matplotlib.pyplot as plt
    import itertools
    
    x = np.linspace(0,2,10)
    y = np.sin(x)
    
    marker = itertools.cycle((',', '+', '.', 'o', '*')) 
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    
    for q,p in zip(x,y):
        ax.plot(q,p, linestyle = '', marker=marker.next())
    
    plt.show()

    única parcela marcador para cada parcela en matplotlib

    • +1 ed ya que este muestra una bonita manera de cómo se puede trabajar con un número arbitrario de argumentos. Mismo método funciona con colores etc.
    • +1 Nunca se sabía acerca de la itertools.ciclo. Mucho mejor que la mitad del horno lambda/modulo esquemas que he usado antes.
    • Sólo una nota para aquellos que utilizan Python 3.x, itertools.ciclo.siguiente ha sido cambiado a la siguiente(itertools.ciclo()). Consulte stackoverflow.com/questions/5237611/itertools-cycle-next
  2. 3

    También puede utilizar el marcador de la generación de tupla, por ejemplo, como

    import matplotlib.pyplot as plt
    markers = [(i,j,0) for i in range(2,10) for j in range(1, 3)]
    [plt.plot(i, 0, marker = markers[i], ms=10) for i in range(16)]

    Ver Matplotlib marcadores doc sitio para más detalles.

    Además, esto puede ser combinado con itertools.ciclo de bucle se mencionó anteriormente

    • Me gusta esta respuesta, ya que permite aumentar la diversidad de los marcadores, aumentando el número en el rango. Sin embargo, no está trabajando en la v2.0.2 como el primer número es el triple debe ser entero: (numsides, style, angle). Me gustaría correcto: n = 16 y markers = [(2+i, 1+i%2, i/n*90.0) for i in range(1, n)].
  3. 1

    Manualmente crear un array que contiene un marcador de personajes y el uso, por ejemplo:

     markers=[',', '+', '-', '.', 'o', '*']
    • Hm, ¿cómo exactamente «el uso de que»? Cuando intento ax.plot(t,s, marker=['s', 'o'], ...), tengo TypeError: unhashable type: 'list'
    • Esto es similar a las ideas anteriores, es decir, el ciclismo a través de una predefinidos de la lista predefinida. Yo no era lo que sugiere que puede ser suministrado como una bandera a plot().
    • Gracias por la aclaración, @bit a Bit – saludos!
  4. 1
    import matplotlib.pyplot as plt
    fig = plt.figure()
    markers=['^', 's', 'p', 'h', '8']
    for i in range(5):
        plt.plot(x[i], y[i], c='green', marker=markers[i])
        plt.xlabel('X Label')
        plt.ylabel('Y Label') 
    plt.show()
    • Hola, bienvenido a Desbordamiento de Pila. Al responder a una pregunta que ya tiene muchas respuestas, por favor asegúrese de añadir una mayor comprensión de por qué la respuesta que estamos dando es de fondo y no simplemente repetir lo que ya ha sido votado por el cartel original. Esto es especialmente importante en el «código» respuestas como la que usted ha proporcionado.

Dejar respuesta

Please enter your comment!
Please enter your name here