Python 如何使用colorbar中的z值生成线性彩色打印(cplot)
在MATLAB中™ 可以使用它生成彩色绘图,基本上看起来像2d绘图,第三轴(z轴)值作为颜色条。是否有任何工具/绘图技术可用于在Python或IDL编程语言中生成类似的绘图?。上一个关于堆栈溢出的问题处理链接中给出的不同问题Python 如何使用colorbar中的z值生成线性彩色打印(cplot),python,plot,idl-programming-language,Python,Plot,Idl Programming Language,在MATLAB中™ 可以使用它生成彩色绘图,基本上看起来像2d绘图,第三轴(z轴)值作为颜色条。是否有任何工具/绘图技术可用于在Python或IDL编程语言中生成类似的绘图?。上一个关于堆栈溢出的问题处理链接中给出的不同问题 In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3) ...: lc.set_array(c)
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
Matplotlib没有直接等效的
cplot
,但您可以使用LineCollection
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
了解了这一点,您必须修改通常的样板文件,添加特定的导入
In [1]: import numpy as np
...: import matplotlib.pyplot as plt
...: from matplotlib.collections import LineCollection
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
现在,生成一些数据(c
是与(x,y)
点关联的第三个值)
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
LineCollection
需要一个3D数组,即一个线段列表,每个线段一个点列表,每个点一个坐标列表,我们使用该数组构建
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
现在,我们实例化LineCollection
,指定所需的颜色映射和线宽,然后立即告诉我们的实例,它的数组(映射到颜色的)是数组c
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
最后,我们以自己的方式绘制lc
,调用autoscale
,因为需要它(尽量不要调用它…),并添加一个色条
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
In [5]: fig, ax = plt.subplots()
...: ax.add_collection(lc)
...: ax.autoscale()
...: plt.colorbar(lc);
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
我知道,它有点笨重,但它可以工作。IDL v8为绘图函数提供了一个易于使用的关键字,名为:
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)
z数据被缩放到颜色表编号39的字节索引。颜色栏需要明确地知道数据范围。你说的“lineared”是什么意思?副本没有解决问题的IDL部分。有关示例解决方案,请参见(如果您有Coyote库,请使用绘图
或cgplots
)。颜色栏应显示z轴上的值。但它显示h=色条(p)。关于在颜色条上添加z轴值的任何想法。我更新了上面帖子中的示例,添加了颜色条。
In [4]: lc = LineCollection(segments, cmap='plasma', linewidth=3)
...: lc.set_array(c)