首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据类标签的Matplotlib颜色

根据类标签的Matplotlib颜色
EN

Stack Overflow用户
提问于 2012-09-19 08:42:21
回答 3查看 150.5K关注 0票数 84

我有两个向量,一个有值,另一个有类标签,比如1,2,3等等。

我想用红色绘制属于第1类的所有点,用蓝色绘制属于第2类的点,用绿色绘制属于第3类的点,等等。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-23 21:23:26

被接受的答案是正确的,但是如果您想要指定哪个类标签应该分配给特定的颜色或标签,您可以执行以下操作。我用颜色条做了一个小小的体操标签,但使情节本身变成了一个很好的一行。这对于绘制使用sklearn完成的分类结果非常有用。每个标签都匹配一个(x,y)坐标。

代码语言:javascript
复制
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

x = [4,8,12,16,1,4,9,16]
y = [1,4,9,16,4,8,12,3]
label = [0,1,2,3,0,1,2,3]
colors = ['red','green','blue','purple']

fig = plt.figure(figsize=(8,8))
plt.scatter(x, y, c=label, cmap=matplotlib.colors.ListedColormap(colors))

cb = plt.colorbar()
loc = np.arange(0,max(label),max(label)/float(len(colors)))
cb.set_ticks(loc)
cb.set_ticklabels(colors)

使用略微修改的this答案版本,可以将上述N种颜色概括如下:

代码语言:javascript
复制
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

N = 23 # Number of labels

# setup the plot
fig, ax = plt.subplots(1,1, figsize=(6,6))
# define the data
x = np.random.rand(1000)
y = np.random.rand(1000)
tag = np.random.randint(0,N,1000) # Tag each point with a corresponding label    

# define the colormap
cmap = plt.cm.jet
# extract all colors from the .jet map
cmaplist = [cmap(i) for i in range(cmap.N)]
# create the new map
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)

# define the bins and normalize
bounds = np.linspace(0,N,N+1)
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

# make the scatter
scat = ax.scatter(x,y,c=tag,s=np.random.randint(100,500,N),cmap=cmap,     norm=norm)
# create the colorbar
cb = plt.colorbar(scat, spacing='proportional',ticks=bounds)
cb.set_label('Custom cbar')
ax.set_title('Discrete color mappings')
plt.show()

这就给出了:

票数 91
EN

Stack Overflow用户

发布于 2012-09-19 09:24:37

假设您的数据在一个二维数组中,这应该是可行的:

代码语言:javascript
复制
import numpy
import pylab
xy = numpy.zeros((2, 1000))
xy[0] = range(1000)
xy[1] = range(1000)
colors = [int(i % 23) for i in xy[0]]
pylab.scatter(xy[0], xy[1], c=colors)
pylab.show()

您还可以设置cmap属性,以控制将通过使用色彩映射表显示哪些颜色;例如,将pylab.scatter行替换为:

代码语言:javascript
复制
pylab.scatter(xy[0], xy[1], c=colors, cmap=pylab.cm.cool)

可以在here上找到色彩映射表的列表

票数 32
EN

Stack Overflow用户

发布于 2017-02-22 14:49:49

一个简单的解决方案是为每个类分配颜色。这样,我们就可以控制每种颜色对每个类的影响。例如:

代码语言:javascript
复制
arr1 = [1, 2, 3, 4, 5]
arr2 = [2, 3, 3, 4, 4]
labl = [0, 1, 1, 0, 0]
color= ['red' if l == 0 else 'green' for l in labl]
plt.scatter(arr1, arr2, color=color)
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12487060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档