条件标记 matplotlib

5

当我有三种由预测确定的点时,我绘制高斯混合的结果。我为每个预测的聚类设置不同的颜色,现在我想要一个不同的标记而不是颜色。

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)设置不同的标记?


1
你必须循环遍历它们。请参见此处http://stackoverflow.com/questions/41078331/matplotlib-read-marker-direction-from-a-file/41078504#41078504 - p-robot
2个回答

3

将包含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)  

请不要为每个数据点单独调用“scatter”。这将使您的图表难以管理。 - Mad Physicist
它不是针对每个数据点调用的,而是针对数据集中的每个颜色调用的。 - p-robot

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接