Suponha que eu tenho três conjuntos de dados:
X = [1,2,3,4]
Y1 = [4,8,12,16]
Y2 = [1,4,9,16]
Eu posso espalhar o seguinte:
from matplotlib import pyplot as plt
plt.scatter(X,Y1,color='red')
plt.scatter(X,Y2,color='blue')
plt.show()
Como posso fazer isso com 10 conjuntos?
Eu procurei por isso e poderia encontrar qualquer referência ao que estou perguntando.
Edit: esclarecendo (espero) minha pergunta
Se eu chamar dispersão várias vezes, só posso definir a mesma cor em cada dispersão. Além disso, sei que posso definir uma matriz de cores manualmente, mas tenho certeza de que há uma maneira melhor de fazer isso. Minha pergunta é: "Como posso plotar automaticamente os vários conjuntos de dados, cada um com uma cor diferente?
Se isso ajudar, posso atribuir facilmente um número único a cada conjunto de dados.
python
matplotlib
scatter-plot
Yotam
fonte
fonte
Respostas:
Não sei o que você quer dizer com 'manualmente'. Você pode escolher um mapa de cores e criar uma matriz de cores com bastante facilidade:
Ou você pode criar seu próprio ciclador de cores usando
itertools.cycle
e especificando as cores que você deseja aplicar o loop, usandonext
para obter o que deseja. Por exemplo, com 3 cores:Pense bem, talvez seja mais limpo não usar
zip
com o primeiro:fonte
plt.legend(['c{}'.format(i) for i in range(len(ys))], loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0., fontsize=11)
ao fundo o texto acima me dá uma legenda com cores.A maneira normal de plotar plotagens com pontos em cores diferentes no matplotlib é passar uma lista de cores como parâmetro.
Por exemplo:
Quando você tem uma lista de listas e deseja que elas sejam coloridas por lista. Eu acho que a maneira mais elegante é sugerida pelo @DSM, basta fazer um loop fazendo várias chamadas para dispersar.
Mas se, por algum motivo, você quiser fazer isso com apenas uma chamada, poderá fazer uma grande lista de cores, com uma lista de compreensão e um pouco da divisão de pisos:
fonte
Uma solução fácil
Se você tiver apenas um tipo de coleção (por exemplo, dispersão sem barras de erro), também poderá alterar as cores depois de plotá-las, às vezes isso é mais fácil de executar.
O único pedaço de código que você precisa:
A saída fornece cores diferentes, mesmo quando você tem muitos gráficos de dispersão diferentes na mesma sub-plot.
fonte
Você sempre pode usar a
plot()
função da seguinte maneira:fonte
Essa pergunta é um pouco complicada antes de janeiro de 2013 e do matplotlib 1.3.1 (agosto de 2013), que é a versão estável mais antiga que você pode encontrar no site matpplotlib. Mas depois disso é bastante trivial.
Como a versão atual do
matplotlib.pylab.scatter
suporte é atribuída: matriz da string do nome da cor, matriz do número flutuante com mapa de cores, matriz de RGB ou RGBA.esta resposta é dedicada à paixão sem fim da @ Oxinabox por corrigir a versão 2013 de mim em 2015.
você tem duas opções de usar o comando de dispersão com várias cores em uma única chamada.
como
pylab.scatter
suporte a comandos, use a matriz RGBA para fazer a cor que desejar;No início de 2013, não há como fazê-lo, pois o comando suporta apenas uma cor para toda a coleção de pontos de dispersão. Quando eu estava fazendo meu projeto de 10000 linhas, descobri uma solução geral para contorná-lo. por isso é muito brega, mas posso fazer de qualquer forma, cor, tamanho e transparente. esse truque também pode ser aplicado para desenhar coleção de caminhos, coleção de linhas ....
o código também é inspirado no código fonte de
pyplot.scatter
, eu apenas dupliquei o que a dispersão faz sem acioná-la para desenhar.o comando
pyplot.scatter
retorna umPatchCollection
Object, no arquivo "matplotlib / collections.py", uma variável privada_facecolors
naCollection
classe e um métodoset_facecolors
.portanto, sempre que você tiver pontos de dispersão para desenhar, faça o seguinte:
fonte
Isso funciona para mim:
para cada série, use um gerador de cores rgb aleatório
fonte
plt.scatter(your values to the graph, color= (np.random.random_sample(), np.random.random_sample(), np.random.random_sample()) )
. Você mencionou um gerador RGB e declarou uma lista RGB, os geradores são declarados entre '()'Uma solução MUITO mais rápida para grandes conjuntos de dados e número limitado de cores é o uso do Pandas e a função groupby:
fonte