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

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

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

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

2 ответа

Решение

Вы можете указать 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,

Выход

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

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)

Теперь в последних пандах вы можете напрямую использовать функцию df.plot.scatter

df = pd.DataFrame([[5.1, 3.5, 0], [4.9, 3.0, 0], [7.0, 3.2, 1],
                   [6.4, 3.2, 1], [5.9, 3.0, 2]],
                  columns=['length', 'width', 'species'])
ax1 = df.plot.scatter(x='length',
                      y='width',
                      c='DarkBlue')

https://pandas.pydata.org/pandas-docs/version/0.23/generated/pandas.DataFrame.plot.scatter.html

Другие вопросы по тегам