【问题标题】:Creating a color map / heatmap in Matlab / Octave在 Matlab / Octave 中创建颜色图 / 热图
【发布时间】:2015-11-09 13:39:50
【问题描述】:

我正在使用类似于 Matlab 的 Octave 3.8.1,我正在尝试创建一个看起来像这样的颜色图/热图

我有一个数组 a1,其中第一列是 x,第二列是 y,第三列是强度。我知道我可以使用 plot(x,y) 绘制二维图,但是如何在图中添加/显示强度(第 3 列)。

a1=
[225.512    2.64537 0.00201692
225.512 2.64537 0.00201692
226.94  1.59575 0.00225557
226.94  1.59575 0.00225557
227.31  1.70513 0.002282
227.31  1.70513 0.002282
227.729 5.34308 0.00205535
227.729 5.34308 0.00205535
227.975 5.12741 0.001822
227.975 5.12741 0.001822]

完整数据集位于此处https://www.dropbox.com/s/mmhpbelnjoondho/full.csv

请注意,这只是示例数据。

【问题讨论】:

  • 你可以试试pcolor 和shading interp。这是octave example
  • MATLAB/Octave 中的大多数 3D 绘图工具都要求强度 (Z) 是与x 和y 数据生成的网格相对应的矩阵。您的示例中没有足够的强度数据来生成与您的问题类似的图。
  • 正如@IKavanagh 所说,您的数据没有足够的信息来绘制表面,如图所示。你能展示一个 MVCE 吗?
  • @Ander Biguri 什么是 MVCE?
  • a1 有什么重复行?那是你的完整数据集吗?

标签: matlab octave heatmap color-mapping colormap


【解决方案1】:
a1=
[225.512 2.64537 0.00201692
225.512  2.64537 0.00201692
226.94   1.59575 0.00225557
226.94   1.59575 0.00225557
227.31   1.70513 0.002282
227.31   1.70513 0.002282
227.729  5.34308 0.00205535
227.729  5.34308 0.00205535
227.975  5.12741 0.001822
227.975  5.12741 0.001822]

为了绘制热图,您需要将强度数据作为图像(即 2D 矩阵)。然后你可以使用imagesc 或imshow 来绘制它。

为了做到这一点,您首先需要获得一个包含 x 值的二维矩阵 (X),以及一个对应的 y 值二维矩阵 (Y),以便您可以插入一个 z 值网格(Z)。

x = a1(:,1);
y = a1(:,2)
z = a1(:,3)
n = 256;
[X, Y] = meshgrid(linspace(min(x),max(x),n), linspace(min(y),max(y),n));
Z = griddata(x,y,z,X,Y);
%// Remove the NaNs for imshow:
Z(isnan(Z)) = 0;
imshow(Z)

您可能希望将Z 标准化为从0(或在此数据的情况下,使最低的非零值等于零)到1 以提高对比度:

m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));

【讨论】:

  • 使用 imagesc 获得更像 OP 要求的结果。
猜你喜欢
  • 2016-05-30
  • 2023-04-04
  • 2021-09-20
  • 1970-01-01
  • 2020-03-08
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多