matplotlib 基于列表中频率的代表性颜色[已关闭]

egmofgnx  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(165)

7天前关闭。
Improve this question
我需要提取一个代表性的颜色基于频率的幻影在一个列表中,颜色应该在光谱的一个固定的梯度色标,在这种情况下从红色到绿色所示的图像。

colors = ['red', 'red', 'green', 'red', 'yellow', 'green', 'red','green','green','green']

代表性颜色不仅仅是最大频率颜色,它必须考虑所有频率,并给出光谱中的颜色。下图是一个示例,但代表性颜色是错误的。在这里,由于大多数"绿色"值,代表性颜色的颜色应该接近刻度中的绿色。

whlutmcx

whlutmcx1#

我采用的方法是制作一个固定的渐变比例:红-黄-绿色。固定比例中的值从0到1。

import matplotlib.colors as mcolors

colormap_colors = ['red', 'yellow', 'green']

# Range of values to be mapped to the colormap
vmin = 0
vmax = 1

# Colors and positions of the color scale
colors = [(0.0, colormap_colors[0]), 
          (0.5, colormap_colors[1]), 
          (1.0, colormap_colors[2])]

# LinearSegmentedColormap object
grad_cmap = mcolors.LinearSegmentedColormap.from_list('grad_cmap', colors)

# Normalize the colormap [vmin, vmax]
norm = mcolors.Normalize(vmin=vmin, vmax=vmax)

之后我从颜色中提取数据,分配与尺度相关的值,并将整个集合的颜色表示为简单的平均值。

data = ['red', 'red', 'green', 'red', 'yellow', 'green', 'red', 'green', 
      'green', 'green','green','green']

df = pd.DataFrame({'colors': data})
color_map = {'red': 0, 'yellow':0.5,'green': 1}
df['color_numbers'] = df['colors'].map(color_map)

average = df['color_numbers'].mean()

我需要的RGB值,我得到它如下.

rgba = grad_cmap(norm(average))
rgb_scaled = mcolors.to_rgb(rgba)
rgb = tuple(255 * elem for elem in rgb)

这是一个点的附加图像与RGB值获得。

相关问题