绘制点基于matplotlib和numpy

时间:2016-01-10 10:16:39

标签: python numpy matplotlib scatter-plot

我道歉,因为我不知道怎么说出我的头衔。我是Python的新手,尤其是matplotlib的新手。在这种情况下,我也在为我的数组使用numpy。

目前,我有一组数据:X有四个属性。每个属性都是一列,每行都是一组数据点(现在我们只能说它们用数字表示)。这是一个小例子:

X
(height)  (weight)  (gender)  (hair color)
6           32.1        0           12
1.112       6.12        1           9
4            2          0           6    
2            3.2        0           11

我还有一个数组Y,对应于0到2的整数值。它只是np.array,但每个元素对应X中的那一行值。例如,如果Y = array([0,2,1,1]),那么我有这些对:

Y          X
0 -> (6, 32.1, 0, 12)
2 -> (1.112, 6.12, 1, 9)
1 -> (4, 2, 0, 6)
1 -> (2, 3.2, 0, 11)

我想要做的是为每对这些属性创建单独的散点图:

(height, weight) -> (0,1)
(height, gender) -> (0,2)
(height, hair color) -> (0, 3)

我希望每个数据点都有一个与Y值对应的颜色。所以y = 0 = 'b'y = 1 = 'g'y = 2 = 'r'

我知道如何创建一个散点图(在这种情况下,只是高度和重量列),它将映射我想要的对使用

plt.plot(X[:,0], X[:,1], 'o', c='b')
plt.show()

但是我不知道如何将这些点中的每一个与保持其颜色的Y值相关联,因为我只能输入一种颜色。我希望得到任何帮助或教程,以指导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:1)

您可以将Y映射到rgb颜色并使用“scatter”绘制具有不同颜色的点:

import numpy
from matplotlib import pyplot as plt

X = numpy.array([[6, 32.1, 0, 12],
    [1.112, 6.12, 1, 9],
    [4, 2, 0, 6],
    [2, 3.2, 0, 11]])

Y = numpy.array([0, 1, 1, 2])

# map numbers to rgb colors
Y_color = numpy.zeros(shape=(Y.size, 3))
Y_color[Y == 0] = (1,0,0)
Y_color[Y == 1] = (0,1,0)
Y_color[Y == 2] = (0,0,1)

# use scatter instead of plot
plt.scatter(X[:,0], X[:,1], c=Y_color)
plt.show()