使用特定列绘制二维NumPy数组的图表

24

我有一个如下所示的2D NumPy数组:

data = np.empty((number_of_elements, 7))
每行有7个(或其他数量)浮点数,表示一个对象的属性。例如,前两个是对象的xy位置,其他数值则是各种属性,甚至可以用于将颜色信息应用到图中。
我想要从data绘制散点图,这样如果p = data[i],一个对象就会被绘制为一个点,以p[:2]作为其2D位置,并使用p[2:4]作为颜色信息(该向量的长度应该决定点的颜色)。其他列不应对图形产生影响。
我该如何操作?
2个回答

29

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

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

选择 xycolor 列可能会像这样:

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”调色板,并将数组“color”中介于0到1之间的每个浮点值映射为一个包含3个元素的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


1
像往常一样完成即可。我只建议不要使用喷气彩色地图,而是使用更连续的地图,如夏季或冬季,这可以更清晰地显示过渡,而不会被喷气式颜色谱所扭曲。 - EnricoGiampieri

11

我不确定您在情节方面具体寻找什么,但您可以像这样切片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 Gallery上找到了想要的内容,我可以提供更多帮助。


1
哇,这太容易了,真是尴尬。我需要研究一下如何切片。 - tamacun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接