使用特定列绘制2维NumPy数组

tam*_*cun 17 python numpy matplotlib

我有一个像这样创建的2D numpy数组:

data = np.empty((number_of_elements, 7))
Run Code Online (Sandbox Code Playgroud)

每行有7个(或其他)浮点数表示对象的属性.前两个例如是xy对象的位置,其他都是甚至可以用来颜色信息适用于情节的各种属性.

我想做一个散点图data,这样,如果p = data[i],一个对象被绘制为一个点p[:2]作为其2D位置,并且比如p[2:4]作为颜色信息(该矢量的长度应该确定该点的颜色).其他列根本不应该与情节有关.

我该怎么办呢?

unu*_*tbu 24

设置一个基本的matplotlib图很容易:

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
Run Code Online (Sandbox Code Playgroud)

摘为列x,ycolor可能是这个样子:

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)
Run Code Online (Sandbox Code Playgroud)

最后一行检索jetcolormap并将数组color中的每个float值(0到1之间)映射到3元组RGB值.有可供选择色彩映射列表在这里.还有一种定义自定义色彩映射的方法.

制作散点图现在很简单:

ax.scatter(x, y, color = rgb)
plt.show()
# plt.savefig('/tmp/out.png')    # to save the figure to a file
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Dan*_*iel 7

不确定你在绘图中究竟要找什么,但你可以像这样切割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]])
Run Code Online (Sandbox Code Playgroud)

然后一些matplot来照顾密谋.如果您在Matplotlib画廊找到了您想要的东西,我可以为您提供更多帮助.