Сюжет 2-мерного массива NumPy с использованием определенных столбцов
У меня есть 2D-массив numpy, который создается следующим образом:
data = np.empty((number_of_elements, 7))
Каждая строка с 7 (или любыми) поплавками представляет свойства объекта. Первыми двумя являются, например, позиция x
и y
объекта, остальные - различные свойства, которые могут даже использоваться для применения информации о цвете к сюжету.
Я хочу сделать график разброса от data
, так что если p = data[i]
, объект изображается как точка с p[:2]
как его 2D-позиция и, скажем, p[2:4]
как информация о цвете (длина этого вектора должен определить цвет для точки). Другие столбцы не должны иметь значения для сюжета.
Как мне это сделать?
Ответы
Ответ 1
Настройка базовой фигуры matplotlib проста:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
Выбор столбцов для x
, y
и color
может выглядеть примерно так:
N = 100
data = np.random.random((N, 7))
x = data[:,0]
y = data[:,1]
points = data[:,2:4]
# color is the length of each vector in `points`
color = np.sqrt((points**2).sum(axis = 1))/np.sqrt(2.0)
rgb = plt.get_cmap('jet')(color)
В последней строке извлекается цветовая палитра jet
и сопоставляет каждое значение с плавающей точкой (от 0 до 1) в массиве color
до значения RGB с тремя кортежами.
Существует список колонок, которые можно выбрать из здесь. Существует также способ определения пользовательских цветовых папок.
Создание графика рассеяния теперь прямолинейно:
ax.scatter(x, y, color = rgb)
plt.show()
# plt.savefig('/tmp/out.png') # to save the figure to a file
![enter image description here]()
Ответ 2
Не уверен, что именно вы ищете в сюжете, но вы можете разрезать 2D-массивы следующим образом:
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> a[:,1]
array([1, 4, 7])
>>> a[:,1:3]
array([[1, 2],
[4, 5],
[7, 8]])
Затем некоторый matplot, чтобы позаботиться о заговоре. Если вы найдете то, что ищете, в Галерея Matplotlib Я могу вам помочь.