如何在散点图pylab中对不同点使用不同的标记

时间:2015-02-24 20:59:22

标签: python matplotlib

我想使用pylab的散点图函数

x = [1,2,3,4,5]
y = [2,1,3,6,7]

在这5个点中有两个聚类,索引1-2(聚类1)和索引2-4(聚类2)。集群1中的点应使用标记'^',而集群2中的点应使用标记's'。所以

cluster = ['^','^','^','s','s']

我试过了

fig, ax = pl.subplots()
ax.scatter(x,y,marker=cluster)
pl.show()

这是一个玩具示例,真实数据有10000多个样本

1 个答案:

答案 0 :(得分:14)

要获得此结果,您需要在同一轴上多次调用scatter。好消息是,您可以根据给定的数据自动执行此操作:

import matplotlib.pyplot as plt

x = [1,2,3,4,5]
y = [2,1,3,6,7]

cluster = ['^','^','^','s','s']

fig, ax = plt.subplots()

for xp, yp, m in zip(x, y, cluster):
    ax.scatter([xp],[yp], marker=m)

plt.show()

更简洁的解决方案是使用您的群集信息过滤输入数据。我们可以使用numpy

来实现
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([2,1,3,6,7])

cluster = np.array([1,1,1,2,2]) 

fig, ax = plt.subplots()

ax.scatter(x[cluster==1],y[cluster==1], marker='^')
ax.scatter(x[cluster==2],y[cluster==2], marker='s')

plt.show()