23

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

data = np.empty((number_of_elements, 7))

每行有 7 个(或其他)浮点数代表一个对象的属性。例如,前两个是对象的位置xy位置,其他是各种属性,甚至可以用于将颜色信息应用于绘图。

我想从 做一个散点图data,这样如果p = data[i],一个对象被绘制为一个点,p[:2]其 2D 位置和p[2:4]颜色信息(该向量的长度应该确定该点的颜色)。其他列对情节根本不重要。

我该怎么办?

4

2 回答 2

28

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

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

选择,的列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)

最后一行检索jet颜色图并将数组中的每个浮点值(介于 0 和 1 之间)映射color到 3 元组 RGB 值。这里有一个颜色图列表可供选择。还有一种方法可以定义自定义颜色图。

制作散点图现在很简单:

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

在此处输入图像描述

于 2012-11-29T20:59:40.563 回答
11

不确定您在图中要查找的确切内容,但您可以像这样对二维数组进行切片:

>>> 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 Gallery中找到您想要的东西,我可以为您提供更多帮助。

于 2012-11-29T20:47:26.597 回答