python - 在 Python matplotlib 中生成用户定义的颜色图

标签 python numpy matplotlib visualization colormap

这是我的问题。

当我想使用很多颜色图时,我可以使用

CMAP = ["summer_r", "brg_r", "Dark2", "prism", "PuOr_r", "afmhot_r", "terrain_r", "PuBuGn_r", "RdPu", \
        "gist_ncar_r", "gist_yarg_r", "Dark2_r", "YlGnBu", "RdYlBu", "hot_r"]
## value was a 3-d array, the first dimension represent the amount of 2-d array with the value (0, 1).     
## I just plot the value 1 for each value[i,:,:]
for i in range(0,len(CMAP),1):
    plt.pcolor(xx,yy,value[i,:,:], cmap = CMAP[i])      

我可以得到这个:

http://i8.tietuku.com/cdcdcd5f539c124b.png

但是在生成图形之前,我无法清楚地意识到每个网格的颜色。
因为我在 CMAP 中添加的某些颜色图可能具有相同的起始颜色。所以,一些 value[i, :, :] 网格将很难区分。

我的想法

Using one colormap instead and split into single color for each value[ i, :, :]. So, each value grid has a different color.

例如:

## 1. cut the colormap, take "jet" for example      
cMap = plt.cm.get_cmap("jet",lut=6)      

http://i4.tietuku.com/be127c44e87a03fc.png

## 2. I havn't figured it out     
## This is the fake code 
CMAP = Func[one color -> colormap](cMap)    

更新-2016-01-18

这是我设置不同的 cmap 和循环的代码,但有点死板。

cmap1 = colors.ListedColormap(["w",'red'])
cmap2 = colors.ListedColormap(["w",'blue'])
cmap3 = colors.ListedColormap(["w",'yellow'])    

CMAP = [cmap1,cmap2,cmap3] 

然后,我就可以应付我最初的尝试了。

但我想知道是否有一种聪明的方法来生成 cmap1、cmap2、......?

最佳答案

困难的部分是想出 N 独特的颜色。在实践中,只要 N 很小,通常最简单的方法就是获取随机颜色。如果您更喜欢获得 N 不同颜色的更好方法,请查看 seabornhusl_palettehsl_palette 被执行。他们在 HSL/HUSL 空间中选择 N 个均匀分布的颜色,并将其转换回 RGB。

无论如何,将特定值绑定(bind)到 matplotlib 中的特定颜色有两个部分。一个是颜色图,另一个是常态。 Normalize 实例(规范)处理将数据范围转换为颜色图的 0-1 空间。

有一个函数可以简化此用例:matplotlib.colors.from_levels_and_colors。它返回一个 cmapnorm 实例,您可以将其传递给 imshow/pcolormesh/scatter/等

作为一个独立示例,让我们生成具有随机数的唯一整数值​​的数据。我们将使用随机柔和的颜色,而不是尝试做一些花哨的事情。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import from_levels_and_colors

nvals = np.random.randint(2, 20)
data = np.random.randint(0, nvals, (10, 10))

colors = np.random.random((nvals, 3))
# Make the colors pastels...
colors = colors / 2.5 + 0.55

levels = np.arange(nvals + 1) - 0.5
cmap, norm = from_levels_and_colors(levels, colors)

fig, ax = plt.subplots()
im = ax.imshow(data, interpolation='nearest', cmap=cmap, norm=norm)
fig.colorbar(im, ticks=np.arange(nvals))
plt.show()

enter image description here

不是最好看的调色板,但也不差。这是另一个运行:

enter image description here

即使有 17 个值,我们仍然可以通过选择随机值来获得相当不同的颜色。

关于python - 在 Python matplotlib 中生成用户定义的颜色图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839877/

相关文章:

python - 如何强制 Python yaml.YAMLObject 转储人类可读格式?

python - 如何用 tensorflow 准确地四舍五入

python - numpy的columnstack/hstack功能不一致

python - 如何有效地检查 numpy 数组包含给定范围内的项目?

python - matplotlib 如何知道要在此代码中显示什么?

用于合并 DXF 文件的 Python 模块

python - 当您有多个组时,如何按连续日期进行分组?

python减少浮点错误

python - Matplotlib 动画不显示

python - 如何将 Seaborn 图集成到 Tkinter GUI 中