如何使用 colorbar 中的 z 值生成线性颜色图(图)
How to generate the lineared color plot (cplot) with z values in colorbar
在 MATLAB™ 中,可以使用 cplot.m
生成彩色图,基本上看起来像二维图,第三轴(z 轴)值作为颜色条。是否有任何 tool/plotting 技术可用于在 Python 或 IDL 编程语言中生成类似的图?上一个关于堆栈溢出的问题处理 link.
中给出的不同问题
Matplotlib 没有 cplot
直接等价物,但您可以使用 LineCollection
.
有了这个理解,您必须修改通常的样板文件,添加特定的导入
In [1]: import numpy as np
...: import matplotlib.pyplot as plt
...: from matplotlib.collections import LineCollection
现在,生成一些数据(c
是与 (x, y)
点关联的第三个值)
In [2]: x = np.linspace(0, 6.3, 64)
...: y = np.sin(x) ; c = np.cos(x)
LineCollection
需要一个 3D 数组,即一个段列表,每个段一个点列表,每个点一个坐标列表,我们使用
构建
In [3]: points = np.array([x, y]).T.reshape(-1,1,2)
...: segments = np.concatenate([points[:-1], points[1:]], axis=1)
现在我们实例化 LineCollection
,指定我们想要的颜色图和线宽,并在我们告诉实例它的 array
(映射到颜色的)是数组 c
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
最终我们以自己的方式绘制 lc
,调用 autoscale
因为需要它(尽量不要调用它...)并添加一个颜色条。
In [5]: fig, ax = plt.subplots()
...: ax.add_collection(lc)
...: ax.autoscale()
...: plt.colorbar(lc);
我知道,它有点笨拙,但它确实有效。
IDL v8 有一个易于使用的 PLOT 函数关键字,称为 VERT_COLORS:
; generate some sample data
x = cos(dindgen(100)/20)
y = sin(dindgen(100)/20)
z = dindgen(100)+100
; plot the data
p = plot(x, y, vert_colors=bytscl(z), rgb_table=39, xrange=[-2,2], yrange=[-2,2], thick=3, /aspect_ratio)
cb = colorbar(range=[min(z), max(z)], target=p)
z 数据被缩放到颜色表编号 39 的字节索引。颜色条需要明确知道数据范围。
在 MATLAB™ 中,可以使用 cplot.m
生成彩色图,基本上看起来像二维图,第三轴(z 轴)值作为颜色条。是否有任何 tool/plotting 技术可用于在 Python 或 IDL 编程语言中生成类似的图?上一个关于堆栈溢出的问题处理 link.
Matplotlib 没有 cplot
直接等价物,但您可以使用 LineCollection
.
有了这个理解,您必须修改通常的样板文件,添加特定的导入
In [1]: import numpy as np
...: import matplotlib.pyplot as plt
...: from matplotlib.collections import LineCollection
现在,生成一些数据(c
是与 (x, y)
点关联的第三个值)
In [2]: x = np.linspace(0, 6.3, 64)
...: y = np.sin(x) ; c = np.cos(x)
LineCollection
需要一个 3D 数组,即一个段列表,每个段一个点列表,每个点一个坐标列表,我们使用
In [3]: points = np.array([x, y]).T.reshape(-1,1,2)
...: segments = np.concatenate([points[:-1], points[1:]], axis=1)
现在我们实例化 LineCollection
,指定我们想要的颜色图和线宽,并在我们告诉实例它的 array
(映射到颜色的)是数组 c
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
最终我们以自己的方式绘制 lc
,调用 autoscale
因为需要它(尽量不要调用它...)并添加一个颜色条。
In [5]: fig, ax = plt.subplots()
...: ax.add_collection(lc)
...: ax.autoscale()
...: plt.colorbar(lc);
我知道,它有点笨拙,但它确实有效。
IDL v8 有一个易于使用的 PLOT 函数关键字,称为 VERT_COLORS:
; generate some sample data
x = cos(dindgen(100)/20)
y = sin(dindgen(100)/20)
z = dindgen(100)+100
; plot the data
p = plot(x, y, vert_colors=bytscl(z), rgb_table=39, xrange=[-2,2], yrange=[-2,2], thick=3, /aspect_ratio)
cb = colorbar(range=[min(z), max(z)], target=p)
z 数据被缩放到颜色表编号 39 的字节索引。颜色条需要明确知道数据范围。