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

2024-05-04 16:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想绘制一个相位敏感光谱图,如本出版物所示(图3右栏,图4顶面板):https://doi.org/10.1016/j.jmr.2014.10.004

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

这样一个数据集中的每一个点都是一个复数

我可以做的是将数据转换成一个RGB(A)数组,然后用imshow绘制规范

但这似乎有点迂回(更像我正在寻找的函数将在后台完成它)。有没有一个内置的功能,我太盲目,还没有找到,这正是我想要的


Tags: 数据httpsorg面板颜色doi绘制空间
1条回答
网友
1楼 · 发布于 2024-05-04 16:39:07

因此,我将Matplotlib documentation中的解决方案改编为我的问题,并希望在这里为遇到相同问题的人分享

其思想是绘制一个覆盖的彩色编码相位图与黑色阿尔法编码模数图

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

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)

希望对将来的人有帮助

相关问题 更多 >