Tenho um quadro de dados pandas e gostaria de traçar valores de uma coluna versus os valores de outra coluna. Felizmente, existe um método de "plotagem" associado aos quadros de dados que parece fazer o que eu preciso:
df.plot(x='col_name_1', y='col_name_2')
Infelizmente, parece que entre os estilos de enredo (listados aqui após o parâmetro tipo
) não há pontos. Posso utilizar linhas ou barras ou mesmo densidade mas não pontos. Há algum trabalho à volta que possa ajudar a resolver este problema?
Pode especificar o estilo
da linha traçada ao chamar df.plot
:
df.plot(x='col_name_1', y='col_name_2', style='o')
O argumento "estilo" também pode ser um "ditado" ou "lista", 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 aceites estão listados na documentação de matplotlib.pyplot.plot
.
Para isto (e para a maioria das conspirações) eu não confiaria nos invólucros de Pandas para matplotlib. Em vez disso, basta usar directamente o matplotlib:
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 que pode aceder a uma matriz NumPy dos valores da coluna's com df.col_name_1.values
por exemplo.
Tive problemas ao usar isto com a plotagem padrão de Pandas no caso de uma coluna de valores de timestamp com precisão de milissegundos. Ao tentar converter os objectos para o tipo datetime64
, descobri também um problema desagradável: < https://stackoverflow.com/questions/26350364/pandas-gives-incorrect-result-when-asking-if-timestamp-column-values-have-attr-a >.
O "Pandas" utiliza o "matplotlib" como biblioteca para parcelas básicas. A forma mais fácil no seu caso será utilizando 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')
Contudo, eu recomendaria a utilização do seaborn
como uma solução alternativa se quiser ter mais parcelas personalizadas sem entrar no nível básico do 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)