Como plotar duas colunas de um quadro de dados pandas usando pontos?


96

Eu tenho um quadro de dados do pandas e gostaria de plotar os valores de uma coluna em relação aos valores de outra coluna. Felizmente, existe um plotmétodo associado aos data-frames que parece fazer o que preciso:

df.plot(x='col_name_1', y='col_name_2')

Infelizmente, parece que entre os estilos de plotagem (listados aqui após o kindparâmetro) não há pontos. Posso usar linhas ou barras ou mesmo densidade, mas não pontos. Existe uma solução alternativa que pode ajudar a resolver esse problema.

Respostas:


115

Você pode especificar o styleda linha traçada ao chamar df.plot:

df.plot(x='col_name_1', y='col_name_2', style='o')

O styleargumento também pode ser um dictou list, por exemplo:

import numpy as np
import pandas as pd

d = {'one' : np.random.rand(10),
     'two' : np.random.rand(10)}

df = pd.DataFrame(d)

df.plot(style=['o','rx'])

Todos os formatos de estilo aceitos estão listados na documentação de matplotlib.pyplot.plot.

Resultado


78

Para isso (e para a maioria das plotagens), eu não confiaria nos invólucros do Pandas para matplotlib. Em vez disso, apenas use matplotlib diretamente:

import matplotlib.pyplot as plt
plt.scatter(df['col_name_1'], df['col_name_2'])
plt.show() # Depending on whether you use IPython or interactive mode, etc.

e lembre-se de que você pode acessar uma matriz NumPy dos valores da coluna com, df.col_name_1.valuespor exemplo.

Tive problemas ao usar isso com a plotagem padrão do Pandas no caso de uma coluna de valores de carimbo de data / hora com precisão de milissegundos. Ao tentar converter os objetos em datetime64tipo, também descobri um problema desagradável: <O Pandas dá resultado incorreto ao perguntar se os valores da coluna Timestamp têm atrito astype >.


3

Pandasusa matplotlibcomo uma biblioteca para plotagens básicas. A maneira mais fácil no seu caso será usar o seguinte:

import pandas as pd
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20)}
df= pd.DataFrame(sample_data)
df.plot(x='col_name_1', y='col_name_2', style='o')

insira a descrição da imagem aqui

No entanto, eu recomendaria usar seaborncomo uma solução alternativa se você quiser ter mais plotagens customizadas sem entrar no nível básico de. matplotlib.Neste caso, a solução será a seguinte:

import pandas as pd
import seaborn as sns
import numpy as np

#creating sample data 
sample_data={'col_name_1':np.random.rand(20),
      'col_name_2': np.random.rand(20)}
df= pd.DataFrame(sample_data)
sns.scatterplot(x="col_name_1", y="col_name_2", data=df)

insira a descrição da imagem aqui


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.