Как можно создать точечный график столбца xy, но на основе значения столбца ‘id’

#python #pandas #matplotlib

#python #pandas #matplotlib

Вопрос:

У меня есть фрейм данных, подобный этому.

  ID        X     Y CLASS  
  A      123   456     0 
  A      789   121     1 
  A      456   333     1
  B      111   123     1   
  B      156   123     1
  C      167   189     1
  C      567   789     1
  

Я хочу сгруппировать одинаковые значения для ‘id’ и создать разные точечные графики на основе оси xy на одном рисунке.
Прямо сейчас я использую

 groups = df.groupby('id')
  

Это создает отдельные группы и строит график вручную для разных идентификаторов, но я бы хотел отобразить все рассеяния в одном изображении и разделить их на основе класса. Извините, если вопрос слишком «новичковый». Спасибо за ваше время.

Комментарии:

1. В каком столбце те же результаты? Y?

Ответ №1:

Следующее даст вам разные диаграммы рассеяния для разных идентификаторов на одном изображении. Я думаю, это то, что вы хотите:

 import matplotlib.pyplot as plt
import seaborn as sns
g=sns.FacetGrid(df, row='ID')
g=g.map(plt.scatter, x='Y', y='Y')
plt.show()
  

В качестве альтернативы, вы можете иметь одну точечную диаграмму с разными цветами точек для каждого идентификатора со следующим кодом:

 import matplotlib.pyplot as plt
import seaborn as sns

sns.scatterplot(df['X'], df['Y'], hue = df['ID'])
plt.show()
  

Комментарии:

1. Спасибо, я пытался сделать первый, но, похоже, он не работает. Я получаю вывод, подобный ссылке , только с одной точкой в центральной координате. ссылка на imgur/.

2. Не могли бы вы, пожалуйста, проверить имена ваших столбцов, много ли в них «X» и «Y» (без пробелов и т.д.)?

Ответ №2:

Чтобы сделать это на том же графике, вы можете использовать:

 import pandas as pd
import matplotlib.pyplot as plt

for name, group in df.groupby('ID'):
    plt.scatter(group.X, group.Y, label=name)
plt.legend()
plt.show()
  

Комментарии:

1. Извините, возможно, я неправильно сформулировал. Я хочу разные графики на одной плоскости. Потому что разные идентификаторы могут иметь общие координаты.