Как построить два столбца фрейма данных pandas с использованием точек?

97

У меня есть фрейм данных pandas, и я хотел бы построить значения из одного столбца по сравнению со значениями из другого столбца. К счастью, есть plotметод, связанный с фреймами данных, который, кажется, делает то, что мне нужно:

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

К сожалению, похоже, что среди стилей сюжета (перечисленных здесь после kindпараметра) точек нет. Я могу использовать линии, полосы или даже плотность, но не точки. Есть ли способ решения этой проблемы?

Римский
источник

Ответы:

115

Вы можете указать styleпри вызове линии на графике df.plot:

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

styleАргумент также может быть dictили list, например:

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'])

Все принятые форматы стилей перечислены в документации matplotlib.pyplot.plot.

Вывод

дерьмо
источник
78

Для этого (и для большинства построений) я бы не стал полагаться на оболочки Pandas для matplotlib. Вместо этого просто используйте 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.

и помните, что вы можете получить доступ к массиву NumPy значений столбца, df.col_name_1.valuesнапример, с помощью.

У меня возникли проблемы с использованием этого с графиком по умолчанию Pandas в случае столбца значений Timestamp с точностью до миллисекунды. Пытаясь преобразовать объекты в datetime64тип, я также обнаружил неприятную проблему: < Pandas дает неверный результат, когда спрашивает, имеют ли значения столбца Timestamp attr astype >.

Эли
источник
3

Pandasиспользует matplotlibкак библиотеку для основных сюжетов. Самый простой способ в вашем случае будет использовать следующее:

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')

введите описание изображения здесь

Тем не менее, я бы рекомендовал использовать seabornв качестве альтернативного решения, если вы хотите иметь больше настраиваемых графиков, не переходя на базовый уровень. matplotlib.В этом случае решение будет следующим:

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)

введите описание изображения здесь

Доктор Арслан
источник