【发布时间】:2019-09-30 09:54:41
【问题描述】:
我正在尝试将快速傅里叶变换的结果显示为来自 2D 矩阵(形状:2048x1024)的 3D 表面,并且侧面的颜色条应与我的值匹配。 显示工作正常,但颜色条的“颜色”和图形的颜色不匹配。我应该如何配置颜色条和图表以匹配?
我尝试根据我的 FFT 结果设置 vmin 和 vmax 值,但随后图表的颜色完全错误。
我也试过clim(vmin, vmax)函数或.set_clim(vmin, vmax)方法,但问题还是一样。
这是我的代码:
rp 是一个 2048x1024 矩阵。
import numpy as np
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
figure(2, figsize=(9.6, 7.2))
ax1 = gca(projection='3d')
X = np.arange(0, 1024)
Y = np.arange(0, 2048)
X, Y = np.meshgrid(X, Y)
Z = 20 * np.log10(abs(rp))
# Plot the surface.
surf1 = ax1.plot_surface(X, Y, Z, cmap='jet', antialiased=False, vmin=np.min(Z), vmax=np.max(Z))
# Add a color bar which maps values to colors.
colorbar(surf1)
title('3D frequency profile')
show()
这是我在没有为颜色条配置 vmin 和 vmax 值的情况下得到的结果。最大颜色(红色)与最大尖峰不匹配,并且颜色条的最大值和最小值与图表中的最小值和最大值不匹配(注意:min=-24 和 max=145)。
这是我设置vmin 和vmax 时得到的结果。所有的图表都是大致相同的阴影,而我应该有两个红色的长矛。
有什么想法吗?
【问题讨论】:
-
为什么不使用
imshow? 3d 图通常难以解释。还有JET is generally considered harmful -
@SamMason imshow 显示 2D 图像可能就足够了,但我的要求要求 3D 图显示信号的功率(Z 轴)。我尝试了不同的
cmap值,例如bwr或PuOr,但问题仍然存在。关于颜色图而不是jet的任何建议?
标签: python matplotlib colorbar