MATLAB二维散射等值线图

plupiseo  于 2023-03-13  发布在  Matlab
关注(0)|答案(1)|浏览(229)

我想做的事情很简单,我只是似乎不能让MATLAB来做。我想用我的二维数据集来绘制等高线。
我的数据集很大;2 x 844240。我可以做个散点图,

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

通过阅读论坛,我发现了Scatter plot with density in Matlab,在那里绘制了一个hisogram。这就足够了,但是,我想覆盖的情节。

问题是它们具有不同的轴,我的散射数据具有[0 0.01 0 2500]的轴;而直方图是[01000100]。
有没有一种方法可以在不修改图像的情况下更改直方图的轴值?
谢谢!

2w2cym1i

2w2cym1i1#

如果我没理解错的话,你是用hist3来构造一个直方图,然后用imagesc来绘制它,你可以用hist3的第二个输出参数来得到直方图的柱形中心,然后把它们传递给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时,需要转置它,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};

如果你想要一个等值线图,你可以使用(注意contourimagesc的轴参数顺序不同):

contour(x_bin_centers, y_bin_centers, counts');

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

相关问题