【问题标题】:How do I assign different dots different colors in a scatter plot made with MatPlotLib?如何在使用 MatPlotLib 制作的散点图中为不同的点分配不同的颜色?
【发布时间】:2012-02-16 18:12:18
【问题描述】:

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

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

每台笔记本电脑的品牌都是联想、惠普或戴尔。我想为代表每个品牌的笔记本电脑的点分配不同的颜色。例如,戴尔笔记本电脑用蓝点表示,而联想笔记本电脑用红点表示。

我该怎么做?

【问题讨论】:

  • 可能最好的选择是拥有三个组,并调用scatter() 三次。 pandas 让这一切变得简单。

标签: python matplotlib


【解决方案1】:

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()

【讨论】:

  • 虽然...在这种情况下,您知道如何添加图例吗?这手动替换了品牌名称,所以无法自动生成图例,对吧?
  • 编辑了一个答案尝试。另一种选择是多次调用 scatter,如 -- 哦,假设 -- this example
猜你喜欢
  • 2015-06-13
  • 2021-01-08
  • 2017-11-14
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多