2012-02-16 47 views
3

使用MatPlotLib和Python,我制作了一个笔记本散布图,它在x轴上的成本和在y轴上的额定值。数据现在存储在一个制表符分隔的文件中。如何在使用MatPlotLib制作的散点图中指定不同的点不同的颜色?

此链接描述MatPlotLib散点图。 http://matplotlib.sourceforge.net/examples/api/unicode_minus.html

每台笔记本电脑的品牌是Lenova,HP或Dell。我想为代表每个品牌笔记本电脑的点分配不同的颜色。例如,戴尔笔记本电脑以蓝点标记,而Lenova笔记本电脑则以红点标出。

我该怎么做?

+2

也许最好的办法就是拥有三组,并且调用'scatter()'三次。 [pandas](http://pandas.pydata.org/)使这一点变得简单。 – 2012-02-16 18:22:58

回答

4

更好的例子是scatter plot example

在你的情况,在地方close数组,你希望那是一个'r''g',或'b'字符串数组一些。所以如果你可以阅读品牌的数组,你可以将它翻译成这些角色的数组。 (我猜你不想volume阵列,这使得各界不同尺寸的等价物。)

你可以你的brand阵列像

brandcolors = [brand[i].replace('HP','g').replace('Lenovo','r').replace('Dell','b') for i in range(len(brand))] 

再转换成颜色,绘图功能看起来像

scatter(cost, rating, c=brandcolors) 

添加图例会有点棘手。 matplotlib docs建议使用“代理艺术家”,在那里创建一些内容,但不要将其放在情节中。例如:

pr = Rectangle((0, 0), 1, 1, fc='r') 
pg = Rectangle((0, 0), 1, 1, fc='g') 
pb = Rectangle((0, 0), 1, 1, fc='b') 
legend([pr, pg, pb], ['Lenovo', 'HP', 'Dell']) 

这有点难看,因为它呈矩形而不管点的形状如何。其他可能的黑客实际上是绘制一个点,但要确保它不在绘图区域内。

plot([-100], 'ro', label='Lenovo') 
... 
ax.set_ylim(bottom=0) 
legend() 
+0

谢谢朋友!这工作。 – dangerChihuahua007 2012-02-16 18:50:01

+0

虽然...在这种情况下,你有任何想法如何添加图例?这会手动替换品牌名称,因此图例无法自动生成,对吗? – dangerChihuahua007 2012-02-16 19:07:02

+1

修改了答案。另一种选择是做多个调用分散,如 - 哦,让我们说 - [这个例子](http://en.wikipedia.org/wiki/File%3AWeight_Growth_of_RN_First_Rate_Line-of-Battle_Ships_1630-1875.svg ) – Mike 2012-02-16 19:52:55

相关问题