gpt4 book ai didi

python - 将字符串与随机颜色匹配的优雅方法 matplotlib

转载 作者:太空狗 更新时间:2023-10-29 17:54:15 26 4
gpt4 key购买 nike

我想将一些数据的标签转换为颜色,以便使用 matplotlib 绘图

我有一个名字列表["bob", "joe", "andrew", "pete"]

在 matplotlib 中是否有一种内置的方法可以将这些字符串与颜色值进行映射?我考虑过随机创建十六进制值,但我最终可能会得到相似的颜色或不可见的颜色。

我尝试了几种不同的方法来尝试从下面的 cmap 答案中创建键值:

这个:

#names is a list of distinct names
cmap = plt.get_cmap('cool')
colors = cmap(np.linspace(0, 1, len(names)))
clr = {names[i]: colors[i] for i in range(len(names))}
ax.scatter(x, y, z, c=clr)

最佳答案

选择 color map , 例如 viridis:

cmap = plt.get_cmap('viridis')

颜色图 cmap 是一个函数,它可以获取从 0 到 1 的值数组并将它们映射到 RGBA 颜色。 np.linspace(0, 1, len(names)) 生成长度为 len(names) 的等间距数字数组,从 0 到 1。因此,

colors = cmap(np.linspace(0, 1, len(names)))

viridis 颜色图中选择等距颜色。

请注意,这不是使用字符串的,它只是使用列表中字符串的序号位置来选择颜色。另请注意,这些不是随机颜色,这只是从任意字符串列表生成独特颜色的简单方法。


所以:

import numpy as np
import matplotlib.pyplot as plt

cmap = plt.get_cmap('viridis')
names = ["bob", "joe", "andrew", "pete"]
colors = cmap(np.linspace(0, 1, len(names)))
print(colors)
# [[ 0.267004 0.004874 0.329415 1. ]
# [ 0.190631 0.407061 0.556089 1. ]
# [ 0.20803 0.718701 0.472873 1. ]
# [ 0.993248 0.906157 0.143936 1. ]]

x = np.linspace(0, np.pi*2, 100)
for i, (name, color) in enumerate(zip(names, colors), 1):
plt.plot(x, np.sin(x)/i, label=name, c=color)
plt.legend()
plt.show()

enter image description here


问题

clr = {names[i]: colors[i] for i in range(len(names))}
ax.scatter(x, y, z, c=clr)

ax.scatterc 参数需要一个 sequence RGB(A)与 x 相同长度的值或单一颜色。 clr 是字典,不是序列。所以如果 colorsx 的长度相同,那么您可以使用

ax.scatter(x, y, z, c=colors)

关于python - 将字符串与随机颜色匹配的优雅方法 matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31883097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com