2010-01-11 18 views
21

Estoy trazando funciones de distribución acumulativa, con una gran cantidad de puntos de datos. Estoy trazando unas pocas líneas en la misma parcela, que están identificadas con marcadores, ya que se imprimirán en blanco y negro. Lo que me gustaría son marcadores espaciados uniformemente en la dimensión x. Lo que obtengo es un marcador por punto de datos (y dado el número de puntos, todos se superponen)Gráfico con menos marcadores que puntos de datos (¿o una forma mejor de trazar los CDF?) [Matplotlib, o ayuda general de trazado]

No estoy seguro de si mi comprensión de cómo trazar bien, o simplemente una falta de comprensión matplotlib. No puedo encontrar una configuración de 'frecuencia de marcador'.

Una solución fácil para una línea sería tomar cada valor N'th de la línea, y usar eso como una línea separada con linestyle = '', pero me gustaría que los marcadores se alineen verticalmente, y los diferentes x arrays tienen diferentes longitudes.

# in reality, many thousands of values 
x_example = [ 567, 460, 66, 1034, 275, 26, 628, 99, 287, 157, 705, 421, 1093, \ 
    139, 204, 14, 240, 179, 94, 139, 645, 670, 47, 520, 891, 450, 56, 964, \ 
    1728, 99, 277, 356, 1628, 745, 364, 88, 112, 810, 816, 523, 401, 89,  \ 
    278, 917, 370, 53, 39, 90, 853, 356 ] 
x = sort(x_example) 
y = linspace(0,1,len(x)) 

ax = subplot(1,1,1) 
plots[w] = ax.plot(x,y, marker='o') 
+0

Solución relacionada para el espaciado de marcador de longitud de arco: http://stackoverflow.com/questions/17406758/plotting-a-curve-with-equidistant-arc-length-markers –

Respuesta

31

Usted puede hacer plot(x,y,marker='o',markevery=5) para marcar cada quinto punto, pero yo no creo que haya ningún soporte integrado para el establecimiento de marcas a intervalos regulares. Puede decidir sobre las x ubicaciones donde desea las marcas, use p. Ej. numpy.searchsorted para encontrar los puntos de datos que caen entre los lugares, y luego interpolar entre los puntos vecinos para encontrar las coordenadas y.

+0

Bueno, eso es ciertamente mejor de lo que hubiera sido mi enfoque. ¡Hora de buscar por orden de surtido! –

+0

Alternativamente, markevery admite una entrada flotante que 'marcadores estarán espaciados a distancias aproximadamente iguales a lo largo de la línea; la distancia a lo largo de la línea entre marcadores se determina multiplicando la distancia de coordenadas de visualización de la diagonal del cuadro delimitador de ejes por el valor 'http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_markevery – Erik

Cuestiones relacionadas