【问题标题】:Plotting points based on what value they end up being in matplotlib and numpy根据它们最终在 matplotlib 和 numpy 中的值绘制点
【发布时间】:2016-01-10 10:16:39
【问题描述】:

我很抱歉,因为我不知道如何表达我的标题。我是 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 值相关联,因为我只能输入一种颜色。我将不胜感激任何可以指导我朝着正确方向前进的帮助或教程。

【问题讨论】:

    标签: python numpy matplotlib scatter-plot


    【解决方案1】:

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

    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()
    

    【讨论】:

    • 感谢您的回复。有效!作为旁注,numpy.zeros(shape=(Y.size,3)) 是做什么的?它只是创建一个具有 Y.size 行数的数组吗? shape= 是如何工作的?查看文档,它只是说shape 返回(# rows, # columns)
    • zeros 返回一个用“0”填充的数组。数组的形状定义了每个维度的维度和大小。因此 numpy.zeros(shape=(Y.size,3)) 返回一个二维数组,其中 Y.size 元素在第一(外部)维度和 3 个元素用于第二维度(在您的情况下,颜色初始化为 (0, 0,0)
    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 2021-11-04
    • 2018-08-07
    • 2019-10-17
    • 2011-01-19
    • 2016-02-15
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多