我刚从scipy
堆栈开始。我正在使用CSV版本的虹膜数据集。我可以通过加载它只是罚款:Pylab:将标签映射到颜色
iris=numpy.recfromcsv("iris.csv")
,并绘制它:
pylab.scatter(iris.field(0), iris.field(1))
pylab.show()
现在我想还积类,它们存储在iris.field(4)
:
chararray(['setosa', ...], dtype='|S10')
将这些字符串映射到绘图颜色的优雅方法是什么? scatter(iris.field(0), iris.field(1), c=iris.field(4))
不起作用(来自文档,它期望float值或colormap)。我没有找到自动生成彩色地图的优雅方式。
cols = {"versicolor": "blue", "virginica": "green", "setosa": "red"}
scatter(iris.field(0), iris.field(1), c=map(lambda x:cols[x], iris.field(4)))
大概是我想要的,但我不太喜欢手动颜色规范。
编辑:最后一行的稍微优雅版:
scatter(iris.field(0), iris.field(1), c=map(cols.get, iris.field(4)))
谢谢。我看到了多重阴谋的选择,但我还没有意识到你在这里使用的优雅条件技巧(+1)。我不得不不同意'scatter'。据我的理解,这正是为这种情节,这些点是独立的,没有连接(你通过设置'linestyle =“none”''工作) – 2012-03-17 16:16:53
'plot' vs'scatter'点是一个不幸的和常见的误解。当需要根据第3或第4个变量连续改变标记的大小和/或颜色时,可以使用'plot'绘制点,只使用'scatter'绘制事物。 'scatter'返回一个难以管理的集合。 'plot' _really is_旨在绘制断点,默认情况恰好是一条线。如果你想要一个更简洁的调用,'plt.plot(x,y,'o')'和'plt.plot(x,y,linestyle ='none',marker ='o')做同样的事情' 。 – 2012-03-17 16:21:01
谢谢。我使用'np.unique(iris.field(4))'(因为我的CSV没有列标签行)。但除此之外,我现在基本上使用你的代码。我真的很喜欢这种情况。 – 2012-03-19 08:38:48