手动创建色图

时间:2018-04-16 05:55:58

标签: python pandas numpy matplotlib colormap

我正在使用散点图来创建热图。我使用Greys色彩图将密集区域显示为黑色,将亮区域显示为白色。所以xy点的区域为黑色,xy的区域为白色。

这很好但是没有数据的区域对于这个应用来说太白了。因为我在地块上显示了背景数据,如果地图太白,则很难看到这些数据。

因此,我试图创建一个色彩图,黑色和白色之间的对比并不是很大。我喜欢它介于黑色和浅灰色之间。

初始代码如下所示:

import matplotlib.pyplot as plt
import numpy as np
import random

x = [random.randrange(1,101,1) for _ in range (10)]
y = [random.randrange(1,101,1) for _ in range (10)]

fig, ax1 = plt.subplots()
ax1.grid(False)

data1,x,y,p = plt.hist2d(x,y, bins = 10, range = np.array([(0,80), (0,80)]))
ax1.imshow(data1, interpolation = 'gaussian', origin = 'lower', extent = [0,100,0,100], cmap = 'Greys')

enter image description here

没有xy数据的区域非常白,并且很难看到这些区域中显示的任何内容。所以我导入了自己的色图,最浅的颜色是灰色。

cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", ["gainsboro","lightgrey","lightgrey","silver","silver","darkgray","darkgray","gray","gray","dimgray","dimgray","black","black"])

这没关系,但我希望从黑色到浅灰色的对比度更大。具体来说,我希望它变得更浅灰色。没有数据的区域(白色)太暗。它只是从灰色变为黑色。

enter image description here

是否有另一种方法可以创建一个颜色对比度更大的色彩图,而这个色彩图并没有完全变成白色。我知道这听起来很模糊,但我希望它会从黑色变为浅灰色。有没有办法手动玩对比?

1 个答案:

答案 0 :(得分:2)

也可以使用您使用的相同方法使用开始和结束颜色创建色彩映射。因此,可以使用方法LinearSegmentedColormap.from_list()

创建从浅灰色到黑色的色彩映射
  

制作一个线性分段色彩图,其名称来自一系列颜色,这些色彩从val = 0处的颜色[0]到val = 1处的颜色[-1]均匀过渡。 N是rgb量化级别的数量。

因此,色彩映射可以这样定义:

cmap = clr.LinearSegmentedColormap.from_list('custom greys', [(.9,.9,.9),(0,0,0)], N=256)

颜色极值在rgb元组中,其中(1,1,1)是白色,(0,0,0)是黑色。