繁体   English   中英

cmap和颜色列表之间的区别

[英]Difference between cmap and a list of colors

色彩图( contour和许多其他绘图功能所需)和简单的颜色列表之间有什么区别? 如何将颜色列表(每种颜色应该代表相等大小的步骤)转换为颜色映射?

色彩图是一系列代表数量概念的颜色。 典型的色彩图(如喷射)为低值标记提供蓝色,为高值标记提供红色。 因此,您可以使用色彩图在图片中创建另一个维度。 对于matplotlib,如果你给出一种颜色,所有标记都会有这种颜色(所以它基本上是一种美学特征)。 如果给出色彩映射以及第三个变量,则该变量将被绘制为颜色而不是轴空间。

在轮廓的情况下,每种颜色可能代表更高或更低的高度(例如)。

您可以使用以下配方设置自己的离散色彩映射:

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

def plot_matrix(rm, title='Robot World', cmap=plt.cm.Blues):
    plt.imshow(rm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.tight_layout()
    plt.show()

cmap = colors.ListedColormap(['k','b','y','g','r'])
bounds=[0,1,2,3,4]
norm = colors.BoundaryNorm(bounds, cmap.N)

rm = np.random.randint(0,4,(5,5))
plot_matrix(rm,cmap=cmap)

我从另一个问题中给出了一个类似的答案,你可以在这里看到。

在问题的第一部分: mpl的颜色映射旨在表示从[0,1]到颜色的函数。 mpl只有两个非常简单的类用于此目的: LinearSegmentedColorMapListedColorMap LinearSegmentedColorMap可以表示三个通道(R,G,B)中的每一个都是分段线性函数的任何颜色映射。 ListedColorMap稍微受限制,因为它需要在该函数(bin)中具有相同大小的片段。 从概念上讲, ListedColorMap和颜色列表之间没有区别。

不需要任何更复杂的函数,因为mpl.Normalize对象可以用于首先以任何期望的方式将输入数据转换为来自[0,1]间隔的数字。

严格地说,只使用仅用两种颜色创建的ListedColorMap对象就足够了,但是Normalize对象必须做很多处理颜色概念的工作,这不应该是他们关注的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM