为plt.scatterplot

时间:2017-05-10 02:30:18

标签: python matplotlib

我在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的每个坐标应该具有相同的颜色(我可能还需要图例中的那些)。

1 个答案:

答案 0 :(得分:1)

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

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

this answer