Как создать двумерную диаграмму рассеяния с группами из 3 столбцов numpy array (gpname, x, y)? - PullRequest
0 голосов
/ 05 мая 2019

Python 2.7 Нужна ваша помощь в создании двумерной диаграммы рассеяния из массива Numpy с 3 размерами, где Col0 используется для групповой метки, а Col 1 и 2 для координат (X, Y).

Массив Numpy выглядит следующим образом

array([['A', '4.83186388889', '2.34534666667'],
   ['A', '4.87818611111', '2.80832888889'],
   ['A', '4.82518611111', '2.33834222222'],
   ['B', '4.53763888889', '-11.88424'],
   ['B', '4.503125', '-11.9406266667'],
   ['B', '4.45975555556', '-11.9688044444'],
   ['C', '6.12376666667', '-9.61480888889'],
   ['C', '6.20991666667', '-9.66523111111'],
   ['C', '6.12281388889', '-9.61702222222'],
   ['D', '6.46020833333', '-11.9756488889'],
   ['D', '6.43584166667', '-11.8586622222'],
   ['D', '6.43401111111', '3.88036888889'],
   ....
   dtype='|S21')

Словарь не может быть использован, так как он хранит уникальные ключи (группы), и у меня нет идеи, как преобразовать его в Pandas DataFrame с правильным форматом. Пробовал, как показано ниже, и хотя он был напечатан в порядке, он не работал для диаграммы.

dataset = pd.DataFrame(**array**, columns = ['Description','X','Y'])
dataset[['X','Y']] = dataset[['X','Y']].apply(pd.to_numeric)

Я хотел бы создать двумерную диаграмму рассеяния для всех тегов моей группы (A, B, C, ...) - из нескольких наборов координат (х, у) - отдельный цвет для каждой группы (A, B, C, ...)

С нетерпением жду вашей помощи.

1 Ответ

0 голосов
/ 05 мая 2019

Вам не нужны панды для черчения, просто matplotlib.Вы можете перебирать массив и передавать каждую координату XY в plt.scatter.Вы даже можете использовать структуру (например, словарь), в которой вы определяете определенный цвет для каждой группы:

import matplotlib.pyplot as plt

colors = {'A': 'red', 
          'B': 'blue',
          'C': 'green',
          'D': 'black'}    
for group, x, y in array:
    plt.scatter(float(x), float(y), color=colors[group])
plt.show()

Редактировать: используйте это вместо того, чтобы динамически создавать случайные цвета для каждой группы, независимо от того, сколько:

from random import random
import matplotlib.pyplot as plt

colors = {}    
for group, x, y in array:
    plt.scatter(float(x), float(y), color=colors.setdefault(group, (random(), random(), random())))
plt.show()
...