2012-02-16 77 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

相關問題