bob*_*nto 2 python colors seaborn
我想从一个 RGB 颜色列表开始,然后从它们构建一个我可以在seaborn绘图中使用的颜色图。我找到了一些关于如何更改默认颜色映射的说明,但这不是我要找的。我想构建一个颜色图,我可以在命令的cmap参数中使用它kdeplot。
matplotlib.colors.ListedColormap从颜色列表构建是相当简单的。以下是使用 tableau 20 调色板中前 4 种颜色的示例 -
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from matplotlib import cm
# Tableau 20 color palette for demonstration
colors = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
# Conversion to [0.0 - 1.0] from [0.0 - 255.0]
colors = [(e[0] / 255.0, e[1] / 255.0, e[2] / 255.0) for e in colors]
cmap = ListedColormap(colors)
a = np.outer(np.linspace(0, 1, 20), np.linspace(0, 1, 20))
im = plt.imshow(a, cmap=cmap)
plt.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是,如果颜色列表中还没有渐变(如上所述),那么使用 a 可能会更有用matplotlib.colors.LinearSegmentedColormap。由于预期的格式,这有点棘手,
[...]
segmentdata参数是一个包含一组红色、绿色和蓝色条目的字典。每个条目应该是x、y0、y1元组的列表,形成表中的行[...]。
表中给定颜色的每一行都是x、y0、y1元组的序列。在每个序列中,x必须从 0 单调增加到 1。对于落在和之间的任何输入值z,给定颜色的输出值将在和之间线性插值x[i]x[i+1]y1[i]y0[i+1]
这样的字典可以通过下面例子中的方法通过算法生成
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
from matplotlib import cm
# Tableau 20 color palette for demonstration
colors = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
colors = [(e[0] / 255.0, e[1] / 255.0, e[2] / 255.0) for e in colors]
nc = len(colors)
c = np.zeros((3, nc, 3))
rgb = ['red', 'green', 'blue']
for idx, e in enumerate(colors):
for ii in range(3):
c[ii, idx, :] = [float(idx) / float(nc - 1), e[ii], e[ii]]
cdict = dict(zip(rgb, c))
cmap = LinearSegmentedColormap('tab20', cdict)
a = np.outer(np.linspace(0, 1, 20), np.linspace(0, 1, 20))
im = plt.imshow(a, cmap=cmap)
plt.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
假设输入列表colors具有正确的 RGB 格式。
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |