我正在尝试使用Python和Matplotlib在3D中可视化一个数据集,该数据集由x-z数据的时间序列(沿着y)组成。
我想创建一个像下面这样的图(这是用Python制作的:http://austringer.net/wp/index.php/2011/05/20/plotting-a-dolphin-biosonar-click-train/),但其中颜色随Z-i变化。即,为了清楚起见,强度由色图以及峰高示出。
显示Z中的色彩Map的示例是(显然是使用MATLAB制作的):
这种效果可以使用MATLAB中的瀑布图选项创建,但我知道Python中没有直接的等效物。
我还尝试在Python中使用plot_surface选项(如下所示),它工作正常,但我想“强制”在表面上运行的线仅在x方向上(即:即使其看起来更像是堆叠的时间序列而不是表面)。这可能吗?
任何帮助或建议都非常欢迎。谢谢。
2条答案
按热度按时间zaq34kh61#
我在matplotlib中生成了一个复制matlab瀑布行为的函数,但我不认为这是最好的解决方案,当涉及到性能。
我从matplotlib文档中的两个例子开始:multicolor lines和multiple lines in 3d plot。从这些示例中,我只看到了可以绘制颜色根据给定颜色Map图根据其z值变化的线,该示例是重新塑造输入数组以通过2个点的线段绘制线,并将线段的颜色设置为2个点之间的z均值。
因此,给定输入矩阵
n,m
、X
、Y
和Z
,函数在n,m
之间的最小维度上循环以绘制每条线,如示例中所示,通过2个点段,其中通过段绘制的整形是使用与示例相同的代码对阵列进行整形。因此,可以使用与matplotlib曲面图相同的输入矩阵轻松生成看起来像matlab瀑布的图:
该函数假设在生成网格时,
x
数组是最长的,默认情况下,线的y是固定的,x坐标变化。然而,如果y维度的大小更大,则矩阵被转置,生成具有固定X的线。因此,生成具有反转的大小(len(x)=40
和len(y)=500
)的网格得到:vnzz0bqm2#
使用pandas Dataframe ,x轴作为第一列,每个光谱作为另一列