Взвешенные данные двумерного точечного графика на пузырьковой диаграмме на сетке / сетке - PullRequest
0 голосов
/ 03 февраля 2019

Фон

У меня есть двумерный набор «необработанных» точек данных в виде массива, например:

[[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]]

Данные представляют собой круговое распределение масссюжет в 2D пространстве.Координаты xy представляют распределение xy точек данных, а значение в каждой координате xy представляет собой массу / интенсивность, измеренную в этой точке данных.

Я хотел бы построить эти данные, , используя только Python, ( только на целых пересечениях xy ), как на графике ниже, но с использованием моих собственных данных рассеяния xy, вместо построения 2D-линии / функции.

enter image description here

Кроме того, я хотел бы объединить логику "указать размер точки" из другого вопроса SO , который позволяет мне указывать точкуразмер по принципу «на выборку / значение», например:

enter image description here


Вопрос

Как объединитьПриведенная выше логика для визуализации набора данных следующим образом:

[[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]]

Примерно так: через matplotlib / pyplot (дискретный домен, дискретный диапазон, непрерывное значение): enter image description here


Дополнительно

Как я могу повторно использовать вышеуказанный набор данных для создания тепловой карты того жеata (т. е. непрерывный домен, непрерывный диапазон, непрерывное значение)?

enter image description here

Или, еще как:

enter image description here

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете сделать это, сначала создав meshgrid, определяя ваши координаты x и y, а затем используя массив data, чтобы определить размер ваших точек.Записи, которые 0 не будут показаны из-за размера 0.Я использую коэффициент масштабирования 100, чтобы просто увеличить точки.

Полный рабочий код:


import numpy as np
import matplotlib.pyplot as plt

data = np.array([[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]])

mesh = np.arange(len(data))
x, y = np.meshgrid(mesh, mesh)
plt.scatter(x, y, s=data*100)
plt.xticks(range(len(data))) # To put ticks at integer values
plt.yticks(range(len(data))) # To put ticks at integer values
plt.show()

enter image description here

Создание тепловой карты

import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt

# data here

x, y = np.meshgrid(np.arange(len(data)), np.arange(len(data)))
plt.scatter(x, y, s=data*100, c=data, cmap=cm.Oranges)
plt.xticks(range(len(data)))
plt.yticks(range(len(data)))

enter image description here

...