我试图绘制一组大点的点密度(见图)。你会怎么做?我尝试使用下面的代码,但是我收到了错误Error using griddedInterpolant
The grid vectors are not strictly monotonic increasing
(我猜是因为这些点没有订购)。
%# bin centers (integers)
xbins = floor(min(X)):step_for_plot:ceil(max(X));
ybins = floor(min(Y)):step_for_plot:ceil(max(Y));
xNumBins = numel(xbins);
yNumBins = numel(ybins);
%# map X/Y values to bin indices
Xi = round( interp1(xbins, 1:xNumBins, X, 'linear', 'extrap') );
Yi = round( interp1(ybins, 1:yNumBins, Y, 'linear', 'extrap') );
%# limit indices to the range [1,numBins]
Xi = max( min(Xi,xNumBins), 1);
Yi = max( min(Yi,yNumBins), 1);
%# plot 2D histogram
imagesc(xbins, ybins, Data), axis on %# axis image
colormap hot; colorbar
hold on, plot(X, Y, 'b.', 'MarkerSize',1), hold off
答案 0 :(得分:1)
我使用hist3
解决了这个问题。这是我使用的代码:
n = hist3(Data,[100,100]);
n1 = n';
n1(size(n,1) + 1, size(n,2) + 1) = 0;
xb = linspace(min(Data(:,1)),max(Data(:,1)),size(n,1)+1);
yb = linspace(min(Data(:,2)),max(Data(:,2)),size(n,1)+1);
g = figure();
h = pcolor(xb,yb,n1);
答案 1 :(得分:0)
如果您只想要每箱的点数,那么为什么要进行插值?
hgram = accumarray([Y(:), X(:)], 1, [yNumBins xNumBins])
否则也许替代方案可能是将其视为图像并模糊图像。所以从上面拿hgram
:
heatmap = conv2(hgram, kernel, 'same');
imshow(heatmap/max(heatmap(:)))
其中kernel
非常简单,如:
ones(n)
那样复杂