Як побудувати два стовпці кадру даних панд за допомогою точок?


96

У мене є фрейм даних 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)

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.