如何在使用MatPlotLib制作的散点图中为不同的点指定不同的颜色?

时间:2012-02-16 18:12:18

标签: python matplotlib

使用MatPlotLib和Python,我正在制作笔记本电脑的散点图,其中x轴为成本,y轴为评级。现在,数据存储在以制表符分隔的文件中。

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

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

我该怎么做?

1 个答案:

答案 0 :(得分: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()