【问题标题】:MATLAB contour plot of 2D scatter二维散点图的 MATLAB 等高线图
【发布时间】:2015-01-17 09:59:21
【问题描述】:

我想做的很简单,我似乎无法让 MATLAB 去做。我想使用我的 2D 数据集绘制轮廓。

我的数据集很大; 2 x 844240。我可以做一个散点图就好了,

scatter(Data(1,:), Data(2,:));

通过论坛我找到了Scatter plot with density in Matlab,其中绘制了一个直方图。这已经足够了,但是,我想覆盖这些图。

问题是它们的轴不同,我的散点数据的轴为 [0 0.01 0 2500];而直方图是 [0 100 0 100]。

有没有办法在不修改图像的情况下改变直方图的轴值?

谢谢!

【问题讨论】:

  • 从这个问题来看,你将塑造什么轮廓并不是很清楚。要获得轮廓,需要在第 3 维中有一个值。听起来您可能正在尝试绘制点密度,对吗?
  • 是的,你是对的,不过,点密度的等高线图会很棒(我可以从下面的答案中做到这一点)。感谢您的评论,一直很感激!

标签: matlab plot


【解决方案1】:

如果我理解正确,您正在使用 hist3 构建直方图,然后使用 imagesc 绘制它。您可以使用 hist3 的第二个输出参数来获取直方图 bin 中心,然后将其传递给 imagesc,例如

nBins_x = 100;
nBins_y = 100;
[counts, bin_centers] = hist3(Data, [nBins_x nBins_y]);
x_bin_centers = bin_centers{1};
y_bin_centers = bin_centers{2};
imagesc(x_bin_centers, y_bin_centers, counts)

其他几点说明:

  • 在您的情况下,您需要在将 [2 x N] 矩阵传递给 hist3 时对其进行转置,这需要一个 [N x 2] 矩阵。

  • imagesc 将第一个轴(我一直称之为“x”轴)放在垂直轴上,将第二个轴放在水平轴上。如果你想翻转它,你可以使用:

    imagesc(y_bin_centers, x_bin_centers, counts')
    
  • 如果您想明确指定直方图箱(例如,匹配散点图),您可以在 hist3 的参数中指定:

    x_bin_centers = linspace(0, .01, 100);
    y_bin_centers = linspace(0, 2500, 100);
    counts = hist3(Data, {x_bin_centers, y_bin_centers};
    

如果您想要等高线图,您可以使用(注意contour 采用轴参数的顺序与imagesc 不同):

contour(x_bin_centers, y_bin_centers, counts');

如果您对轮廓的锯齿状不满意,您可以考虑使用核密度估计而不是直方图 (查看 ksdensity)(哎呀,看起来 ksdensity 是一维的仅。但有用于双变量核密度估计的文件交换提交)。

【讨论】:

  • 这听起来可行!我会在今天晚些时候试一试!谢谢,我非常感谢您回复中的详细信息。
  • 在尝试您的代码时,我发现图中的轴不随情节而变化。因此,我留下了一条线(因为 x 数据仅从 0 到 0.01,但 x 轴显示从 0 到 100)。我认为一切都正确绘制,我只需要一种正确显示它的方法。你有什么建议吗?我尝试使用set(gca,'xlim',[0 0.01]); 无济于事。
  • 对不起,我的错误。我有 axis equal 搞砸了。再次感谢!像魅力一样工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多