条件标记matplotlib

时间:2016-12-12 11:30:45

标签: python matplotlib markers

当我有3种类型的点由预测确定时,我绘制高斯混合的结果。我预测的每个聚类都有不同的颜色,现在我希望有一个不同的标记而不是颜色。

colors=['pink' if i==0 else 'skyblue' if i==1 else 'lightgreen' for i in resultGM]
markers=['c' if i==0 else 'o' if i==1 else 'D' for i in resultGM]
ax=plt.gca()
ax.scatter(datas[:,0], datas[:,1], alpha=0.8, c=colors,marker=markers)  
plt.title("Calling "+name_snp)
plt.xlabel('LogRatio')
plt.ylabel('Strength')
plt.show()

它适用于这样的颜色: enter image description here

但我不能用不同的标记做同样的事情,它不能识别标记列表。

如何为每个群集(0,1,2)设置不同的标记,就像我有颜色一样?

2 个答案:

答案 0 :(得分:2)

将其中的plt.scatter更改为此行:

for x, y, c, m in zip(datas[:,0], datas[:,1], colors, markers)
    ax.scatter(x, y, alpha=0.8, c=c,marker=m)  

答案 1 :(得分:1)

假设resultGM是整数标签的数组。如果不是,请将其变成一个。对于每个群集,您应该只对scatter进行一次呼叫,而不是每个数据点都进行一次呼叫,而另一个答案表明:

colors = ['pink', 'skyblue', 'lightgreen', ...]
markers = ['c', 'o', 'D', ...]

for i in range(resultGM.max()):
    mask = (resultGM == i)
    ax.scatter(data[mask, 0], data[mask, 1], alpha=0.8, c=colors[i], marker=markers[i])