【问题标题】:Assign a different colour for each label in a plt.scatterplot为 plt.scatterplot 中的每个标签分配不同的颜色
【发布时间】:2017-05-10 02:30:18
【问题描述】:

我在 python 中绘制这个散点图,我希望为每个标签绘制不同(对比)颜色的点。每个标签都有多个点。

似乎可以用来注释的东西,但我不太确定怎么做,因为我找不到它:

  for i, label in enumerate(labels):
    x, y = low_dim_embs[i, :]
    plt.scatter(x, y)
    plt.annotate(label,
                 xy=(x, y),
                 xytext=(5, 2),
                 textcoords='offset points',
                 ha='right',
                 va='bottom')

我可以将上面的命令替换为:

plt.scatter(x, y, color=mycolors)

这会给我手动指定的颜色,但是对于每个条目(并且每个条目有很多重复)。有没有自动的方法?

我的数据集如下所示:

x,y,label
1,2,label1
1,3,label1
2,-1,label1
4,1,label2
5,1,label2
...

属于 labelx 的每个坐标都应该具有相同的颜色(我可能还需要图例中的那些)。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    解决相同标签与相同颜色的问题的方法是编写一个脚本,该脚本生成一个颜色列表,为数据中的每个唯一值分配一个唯一编号(该代码行在this answer 中进行了解释):

    import numpy as np
    import matplotlib.pyplot as plt
    
    line = plt.figure()
    
    data = [[1,1.5,3,2.4,5],[2,4.1,2.4,1,3],["apple","banana","grape","apple","banana"]]    
    
    colors = [{ni: indi for indi, ni in enumerate(set(data[2]))}[ni] for ni in data[2]]
    
    plt.scatter(data[0], data[1], c=colors, cmap="plasma")    
    
    for i in range(len(data[0])):    
        plt.annotate(str(data[2][i]),
                         xy=(data[0][i], data[1][i]),
                         xytext=(data[0][i], data[1][i]),
                         textcoords='offset points',
                         ha='right',
                         va='bottom')
    
    plt.show()
    

    【讨论】:

    • 这给了我一个错误:c = tuple(map(float, c)) TypeError: 'numpy.int64' object is not iterable。另外,如果 10 个条目具有相同的标签,它们真的会得到相同的颜色吗?
    • @dorien 不,它不符合该要求,在您编辑之前我不知道这一点,抱歉。我会尝试更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多