我能够用这个简单的Python脚本绘制 some Matplotlib的颜色图的RGB分量:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
mapa = cm.get_cmap('viridis', 256)
R = []; G = []; B = []
ind = np.linspace(1,256,256)
for item in mapa.colors:
R.append(item[0])
G.append(item[1])
B.append(item[2])
plt.figure(1,figsize=(8,8))
plt.plot(ind,R,'r-')
plt.plot(ind,G,'g-')
plt.plot(ind,B,'b-')
plt.xlabel('$Colour \\ index$', fontsize=16, fontname="Times")
plt.ylabel('$RGB \\ component \\ weight$', fontsize=16, fontname="Times")
plt.show()
一些,但不是全部。它可以与'viridis',但不与臭名昭著的'喷气',或'棱镜',或'夏季'彩色Map。这是因为(看起来)这些Map没有属性'colors':
runfile('F:/Documents/Programs/Python/Colourmap_Plot. py',wdir ='F:/Documents/Programs/Python')Traceback(最近调用最后一次):
文件“F:\Documents\Programs\Python\Colourmap_Plot.py”,第37行,用于mapa.colors中的项目:
属性错误:“LinearSegmentedColormap”对象没有属性“colors”
我想知道为什么会这样。所有的Map在结构上不应该是一样的吗?我如何区分Map有没有“颜色”属性?最后,如何从这些“不符合”的Map中绘制组件?
1条答案
按热度按时间cclgggtu1#
matplotlib中有两种类型的色彩Map表
ListedColormap
sLinearSegmentedColormap
sListedColormap
基本上是一个颜色列表。通过cmap.N
获取颜色的数量,通过cmap.colors
获取颜色本身。LinearSegmentedColormap
s由插值定义。它们将一些采样点存储在字典中,并且可以根据所需的颜色数量在这些采样点之间进行插值。当前的颜色数量同样可以通过cmap.N
访问。所有的Map在结构上不应该是一样的吗?
我想他们应该。至少
LinearSegmentedColormap
s还应该公开.colors
属性。我如何区分Map有没有“颜色”属性?
您可以键入或示例比较。
也可以检查属性是否存在,
最后,如何从这些“不符合”的Map中绘制组件?
从色彩Map表中获取颜色的一个可能的选项,独立于它们的类型,是用一个 integers 的列表/数组调用色彩Map表,有效地索引到
cmap.N
的所有颜色:colors
现在是贴图的RGBA颜色的N by 4
形状阵列。