2D散射的MATLAB等高线图

时间:2014-11-19 18:36:00

标签: matlab plot

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

我的数据集很大; 2 x 844240.我可以很好地做散点图,

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

通过我发现Scatter plot with density in Matlab的论坛阅读,其中绘制了一个组织图。这就足够了,但是,我想覆盖这些情节。

enter image description here

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您使用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)(oops,看起来像ksdensity是1 -D only。但是有关于双变量核密度估计的文件交换提交。)