#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. Извините, возможно, я неправильно сформулировал. Я хочу разные графики на одной плоскости. Потому что разные идентификаторы могут иметь общие координаты.