Python 为什么是Matplotlib的结构';什么颜色的地图不同?
我能够使用以下简单的Python脚本绘制一些Matplotlib颜色贴图的RGB组件:Python 为什么是Matplotlib的结构';什么颜色的地图不同?,python,matplotlib,Python,Matplotlib,我能够使用以下简单的Python脚本绘制一些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 = []
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”,但不适用于臭名昭著的“jet”或“prism”或“summer”彩色地图。这是因为(似乎)这些贴图没有“颜色”属性:
runfile('F:/Documents/Programs/Python/colormap\u Plot.py',
wdir='F:/Documents/Programs/Python')回溯(最近的调用
最后):
文件“F:\Documents\Programs\Python\colormap\u Plot.py”,第37行,在
对于mapa.colors中的项目:
AttributeError:“LinearSegmentedColormap”对象没有属性
“颜色”
我想知道为什么会这样。难道所有的地图在结构上不应该是平等的吗?我如何区分具有“颜色”属性的地图和不具有“颜色”属性的地图?最后,如何从这些“不一致”地图中绘制组件
谢谢。matplotlib中有两种颜色贴图
sListedColormap
sLinearSegmentedColormap
ListedColormap
s基本上是一个颜色列表。您可以通过cmap.N
获取颜色数,也可以通过cmap.colors
获取颜色本身
LinearSegmentedColormap
s通过插值定义。它们将一些采样点存储在字典中,并根据所需颜色的数量在这些采样点之间进行插值。通过cmap.N
同样可以访问当前的颜色数
难道所有的地图在结构上不应该是平等的吗
我想他们应该。至少LinearSegmentedColormap
s还应公开.colors
属性
我如何区分具有“颜色”属性的地图和不具有“颜色”属性的地图
您可以输入或实例Comparison
if isinstance(cmap, matplotlib.colors.LinearSegmentedColormap):
# do something
print("Is a segmented map")
elif isinstance(cmap, matplotlib.colors.ListedColormap):
# do something else
print("Is a listed map")
您还可以检查该属性是否存在
if hasattr(cmap, "colors"):
print("Is a listed map")
else:
print("Is either not a colormap, or is a segmented one.")
最后,如何从这些“不一致”地图中绘制组件
从colormap获取颜色的一个可能选项,与颜色的类型无关,是使用整数列表/数组调用colormap,有效地索引所有颜色,直到cmap.N
:
colors = cmap(np.arange(0,cmap.N))
colors
现在是地图的一个nx4
形状的RGBA颜色数组。如果我导入matplotlib
并编写mapa=matplotlib.cm,对我来说效果很好。get_cmap(…
我的错了,我发布了一个错误的脚本版本。原来的脚本有一个“from matplotlib import cm”我只是无缘无故地删除了这一行。我发布了一个更正版本。另请参阅本教程:@Jody Klymak,该教程正是从我开始的地方开始的。但我直到最后才读到“这可能会有所不同。我稍后会仔细看一看。谢谢。如果我没有弄错的话,还有第三种地图。tab10似乎是其中之一。RGB组件是作为元组的元组列表,而不是列表列表(数组)。我想知道为什么。它有.colors
属性。tab10
应该与viridis
相同,例如ListedColormap
。你有显示它们之间任何差异的代码吗?我验证的是cm.viridis.colors
显示类似[[0.267004,0.004874,0.329415],而cm.tab10.colors
显示((0.12156862745098039,0.46666667,0.7058823529411765),…
。这显然是一种不同的结构,元组取代了列表。对。没有发生类型转换,。颜色实际上保持原样。我同意这是不可取的。现在你可以自己转换成numpy数组,np.array(cmap.colors)
。