Plote com menos marcadores do que pontos de dados (ou uma maneira melhor de plotar CDFs?) [Matplotlib, ou ajuda geral da plotagem

StackOverflow https://stackoverflow.com/questions/2040306

Pergunta

Estou plotando funções de distribuição cumulativa, com um grande número de pontos de dados. Estou traçando algumas linhas no mesmo gráfico, que são identificadas com marcadores, pois serão impressas em preto e branco. O que eu gostaria são marcadores uniformemente espaçados na dimensão X. O que estou recebendo é um marcador por ponto de dados (e, dado o número de pontos, todos eles se sobrepõem)

Não tenho certeza se é o meu entendimento de como planejar bem ou apenas a falta de compreensão do matplotlib. Não consigo encontrar uma configuração de 'frequência do marcador'.

Uma solução fácil para uma linha seria assumir todos os n'th valor da linha e usá -la como uma linha separada com Linestyle = '', mas eu gostaria que os marcadores fossem alinhados verticalmente, e as diferentes matrizes X têm diferentes diferentes comprimentos.

# 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')
Foi útil?

Solução

Você pode fazer plot(x,y,marker='o',markevery=5) Para marcar cada quinto ponto, mas não acho que haja suporte interno para definir marcas em intervalos pares. Você pode decidir nos locais X onde deseja as marcas, use por exemplo numpy.searchsorted Para descobrir quais dados apontam, os locais se enquadram e, em seguida, interpolam entre os pontos vizinhos para encontrar as coordenadas y.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top