【问题标题】:MATLAB Plotting Contour Map from Different PlotsMATLAB 从不同的绘图中绘制等高线图
【发布时间】:2018-01-23 13:47:58
【问题描述】:

我正在尝试编写一个 MATLAB 脚本来给我一个等高线图。必须根据我从 100 张图像生成的输入来创建等高线图。

故事是这样的:

我有 100 张图像,我对其运行图像处理算法进行优化。现在,我得到了他们的能量曲线。所以,我有 100 条能量曲线。我想创建一个等高线图,它会告诉我图中的点在哪里更密集。 (能量曲线绘制为能量与迭代的关系,迭代次数固定)

以下是我的变量:

energy(iteration,numImages)

希望我解释清楚。

提前致谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请问您可以发布您已经尝试过的内容吗?这将使您获得更好的帮助!
  • 我尝试为每条曲线通过的每个点添加 1。但我无法让该代码工作,也无法将其转换为 3d 地图。
  • 你可以创建一种热图吗?例如imagesc.
  • 热图也可以。但是,我必须对所有值求和才能做到这一点。我无法以一种很好的方式对这些值求和以帮助我使用 imagesc。
  • 1) 使用semilogy 2) 不要绘制能量,绘制能量除以数据的能量,因此最大值为 1(因此您的绘图没有任意单位)

标签: matlab plot matlab-figure contour


【解决方案1】:

我将您的问题解释为如何根据energy 中的能量创建具有颜色的曲面图。我将通过使用contour 函数和使用meshgrid 生成的网格来解决这个问题。如果每幅图像用 100 个文件的 1000 个数据点描述,则可以生成如下图:

% using stuff as random junk instead of energy
numPoints = 1000;
numFiles = 100;
stuff = rand(1000,100); % replace with actual information
[X, Y] = meshgrid(1:numFiles, 1:numPoints);
contour(X,Y,stuff);

您还可以使用 surf 和相同的逻辑创建 3D 曲面图。

【讨论】:

  • 感谢您的回复。在我的例子中,x 轴应该是迭代次数,y 轴应该是能量,z 轴应该是包含从某些区域穿过多少行的信息。它应该将线条的密度显示为轮廓。我尝试了与您的代码类似的事情,并尝试在每行通过的每个点上加 1 而不是 stuff,但我没有成功。
【解决方案2】:

根据我所看到的图表(也使用 cmets),一种可能的方法是使用 plot3 为每个绘图绘制 3D 线。

为此,您可以使用如下代码:

x=(0:0.01:1)';

aexp=zeros(100,numel(x));
hold on
for ii=1:100;
%      aexp(ii,:)=exp((-x+ii/10)); %exponential
     aexp(ii,:)=exp(-(x-ii/100).^2); %~gaussian
%     aexp(ii,:)= x*ii; %linear increase 
    plot3(x,aexp(ii,:),ii*ones(1,numel(x)));
end
 % set(gca,'yscale','log'); % uncomment if you need logscale.

给予 我有几个情节选择。它总是从 XY 视图绘制。我手动更改,但您可以使用view command。请注意,我使用了一个简单的计数器来设置 z 方向的间距。

以类似的方式,您可以使用轮廓进行绘图。对于我的代码,在 for 循环中生成数据后,删除/注释 plot3 并添加:

contour(aexp) %outside the for loop, 

给予

请注意,我并没有真正注意我正在策划的内容。您可以在Matlab page 中找到更多关于轮廓的信息。

您评论说 x 轴应该是迭代次数,y 轴应该是能量,z 轴应该是包含从某些区域通过的线数的信息。为此,创建一个 qq 变量,即 qq=number_of_lines(number of iterations,energy) 。如果没有,请为能量制作一个离散网格。无论如何,迭代次数可能是离散的。该功能是您需要设计的,但我会选择检查每种能量和每次迭代的行数的东西。在这种情况下,您将拥有依赖于 y 和 x 的 z 函数,即使用轮廓或曲面的情况。

我上面的函数为每个 ii 点创建一条线,以具有 3d 函数。另一个额外循环的版本并不难。只要记住每个点都有相同的规则网格,否则你会遇到麻烦。

【讨论】:

  • 感谢您的回复。在我的例子中,x 轴应该是number of iterations,y 轴应该是energy,z 轴应该是包含从某些区域穿过的线数的信息。它应该将线条的密度显示为轮廓。如果您可以根据这些新信息提出更多建议,我真的很感激。
  • 我编辑了这个问题。检查最后 2 个部分。不确定它是否是您正在寻找的。​​span>
  • stackoverflow.com/questions/9134014/… 这个链接实际上很好地描述了我的问题。在这种情况下,变量 X 和 Y 只是向量。我正在尝试修改这段代码以满足我的需要。也许如果你也可以看这个,你可以给我另一个观点。谢谢。
  • 实际上,该函数与我在最新部分中描述的差不多——x 和 y 的 z 函数——但以一种更优雅的方式(数学上和视觉上)与实际代码:D。我会遵循该代码,但由于您对“每个区域的行数”感兴趣,请注意不要对变量犯错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多