gpt4 book ai didi

python - 为什么 Matplotlib 颜色图的结构不同?

转载 作者:行者123 更新时间:2023-12-01 00:14:59 25 4
gpt4 key购买 nike

我可以使用这个简单的 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 = []

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”彩色贴图。发生这种情况是因为(看起来)这些 map 没有属性“颜色”:

runfile('F:/Documents/Programs/Python/Colourmap_Plot.py',wdir='F:/Documents/Programs/Python') Traceback (most recent calllast):

File "F:\Documents\Programs\Python\Colourmap_Plot.py", line 37, infor item in mapa.colors:

AttributeError: 'LinearSegmentedColormap' object has no attribute'colors'

我想知道为什么会发生这种情况。所有 map 的结构不都应该相同吗?我如何区分具有“颜色”属性的 map 和不具有“颜色”属性的 map ?最后,如何从这些“不合格” map 之一绘制组件?

最佳答案

matplotlib中有两种类型的颜色图

  • 列出的颜色图
  • LinearSegmentedColormaps

ListedColormap 基本上是颜色列表。您可以通过 cmap.N 获取颜色数量,并通过 cmap.colors 获取颜色本身。

LinearSegmentedColormap通过插值定义。它们将一些采样点存储在字典中,并可以根据所需的颜色数量在这些采样点之间进行插值。当前的颜色数量同样可以通过 cmap.N 访问。

Shouldn't all maps be equal with regard to their structure?

我想他们应该这样做。至少 LinearSegmentedColormap 还应该公开 .colors 属性。

How could I tell maps that do have the 'colors' attribute from the ones that haven't?

您可以键入或实例比较。

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.")

And finally, how to plot the components from one of those 'non-conforming' maps?

从颜色图中获取颜色(与颜色类型无关)的一个可能选项是使用整数列表/数组调用颜色图,有效地索引直到 cmap 的所有颜色。 N:

colors = cmap(np.arange(0,cmap.N)) 

colors 现在是 map 的 RGBA 颜色的 N x 4 形状数组。

关于python - 为什么 Matplotlib 颜色图的结构不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com