matplotlib 用不同颜色绘制数字作为标记

ztigrdn8  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(142)

我想表示一个点的数据集,每个点都有一个x和y坐标以及一个个位数的值,每个值都应该用一种特定的颜色表示。我设法做的是创建这样的东西,看起来很不错:

# x, y and digits are one-dimensional np.arrays of the same shape
plt.scatter(x, y, marker='o', c=digits)
#random colormap
plt.viridis()

现在我想表示数字本身,而不仅仅是彩色的点。据我所知,marker-argument不能是一个数组,所以我决定这样做:

for i in range(len(digits)):
    plt.scatter(x[i], y[i], c=digits[i], marker=('${}$'.format(digits[i])))

这几乎做到了,但'c=digits[i]'似乎不起作用,因为数字实际上并没有编码任何特定的颜色。我认为(如果我错了,请纠正我)第一段代码可以工作,因为python不知何故自动理解了c=digits并不是指任何实际的颜色,而是想区分两个点。
所以问题是:在第二种情况下,我可以做的最简单的事情是什么,以指示数字的颜色,而不是直接说明它们,而是使用默认的色彩Map表?(理想情况下,我希望得到与第一个代码相同的东西,但使用数字而不是点)

wlp8pajw

wlp8pajw1#

看来我已经找到了解决办法,所以以防某人有类似的问题:

cmap = plt.cm.get_cmap('name_of_demanded_colormap', neededColorsNum).colors
for i in range(len(digits)):
    plt.scatter(x[i], y[i], \\
        c=np.array([cmap[digits[i]]]), \\
        marker=('${}$'.format(digits[i])))

一些“解释”:- cm是神知道什么原因需要的对象;

  • get_cmap是创建指定颜色Map的方法,它出乎意料地不是数组,而是另一个上帝知道的对象;
  • colors是颜色Map的方法,它最终创建了一个可以使用的东西,一个用行表示颜色的矩阵;
  • 代码是如此的自然,jupyter要求把颜色列做成二维,因为有些误解的可能性。

不管有什么抱怨,都能按预期工作,所以足够好了。

相关问题