Matplotlib复杂数字的热图:模数和相位作为色调和价值?

时间:2019-06-13 09:12:24

标签: python matplotlib

我想按照此出版物的方式绘制相敏频谱图(图3右列,图4顶部面板):https://doi.org/10.1016/j.jmr.2014.10.004

对于那些无法访问该出版物的人:这是一个时频数据集的热图,它通过使用HSV颜色空间中的值来表示数据在特定时间的振幅和色调来对数据进行颜色编码。表示该频率分量的相位。

此类数据集中的每个点都是一个复数。

我所能做的就是将数据转换成符合我的规范的RGB(A)数组,然后用imshow进行绘制。

但是这似乎有点round回(更像我要寻找的功能会在后台执行)。是否有一个我过于盲目找不到的内置功能,但是它确实可以满足我的要求?

1 个答案:

答案 0 :(得分:0)

因此,我已将Matplotlib documentation的解决方案改用于我的问题,并希望在此与遇到相同问题的人分享。

这个想法是用黑色的alpha编码模量图绘制颜色编码的相位图的叠加图。

这是我的代码(缺少轴标签等,但是应该很容易添加):

import numpy as np
import matplotlib.pyplot as plt


def huevalueplot(cmplxarray):
    # Creating the black cover layer

    black = np.full((*cmplxarray.shape, 4), 0.)
    black[:,:,-1] = np.abs(cmplxarray) / np.abs(cmplxarray).max()
    black[:,:,-1] = 1 - black[:,:,-1]

    # Actual plot

    fig, ax = plt.subplots()
    # Plotting phases using 'hsv' colormap (the 'hue' part)
    ax.imshow(np.angle(cmplxarray), cmap='hsv')
    # Plotting the modulus array as the 'value' part
    ax.imshow(black)
    ax.set_axis_off()


# Create complex sample data

minval = -2
maxval = 2
step = 0.01

datareal = np.arange(minval, maxval+step, step)
dataimag = datareal * 1j

cmplxarray = np.zeros((datareal.size, datareal.size), dtype=complex)

for i in range(datareal.size):
    for k in range(datareal.size):
        cmplxarray[i,k] = datareal[i] + dataimag[k]

# Plot
huevalueplot(cmplxarray)

希望它对以后的人有所帮助。