186 views (last 30 days)

Show older comments

Mike Garrity
on 30 Jun 2015

Scatter doesn't do any binning. It's showing each individual data element.

Perhaps this approach does what you want?

x = randn(1,1000);

y = randn(1,1000);

n = hist3([x', y']);

pcolor(n)

Andrea Ackroyd
on 3 Dec 2018

I am commenting on this old post because I am doing a very similar thing, but achieving some unexpected results.

I am making a histogram2 (tile view) of one dataset, which is time samples of two variables. On the same axes I plot a contour of a map which comes from different data (essentially a target map for the time based data which is in the histogram).

The unusual behaviour is that the colour scale of the hist2 appears to be affected by having the contour on the same axes.

If it is noteworthy, I am plotting the contour first, with a solid colour for all contour lines (not using colormap). Then I plot the histogram second.

Walter Roberson
on 30 Jun 2015

Assuming that your data starts at 0 and contains fractional values and is to be binned by 1 x 1, and that your coordinates are in X and Y,

xidx = 1 + floor(X(:));

maxxoff = max(xidx) - 1;

yidx = 1 + floor(Y(:));

maxyoff = max(yidx) - 1;

counts = accumarray([yidx, xidx], 1); %remember Y corresponds to rows

imagesc(counts, 'XData', 1/2+[0 maxxoff], 'YData', 1/2+[0 maxyoff]);

hold on

contour(1/2+(0:maxxoff), 1/2+(0:maxyoff), counts)

The 1/2 offsets have to do with referencing the centers of the boxes.

Elena De Angelis
on 14 Jan 2016

Edited: Walter Roberson
on 14 Jan 2016

Hi, I'm trying to do the same but my result is not what I expect, could someone tell me please what i'm doing wrong?

x = dNBR_filt_CHANGE;

y = NBR_post_CHANGE;

scatter(x,y,'r.')

hold on

[n,c] = hist3([x, y]);

contour(c{1},c{2},n)

Hamdullah OZOGUL
on 1 Feb 2018

You just have to transpose the n to have the correct order.

contour(c{1},c{2},n')

Jos? Manuel Amigo
on 11 Nov 2017

PCx = rand(2000,1); PCy = rand(2000,1);

bins = 50; Msize = 10;

[N C] = hist3([PCx,PCy],[bins bins]);

CX = C{1}; CY = C{2};

N2 = N; N2(N2 == 0) = []; Nunique = unique(N2);

colors = jet(length(Nunique));

for i = 1:length(PCx) if isnan(PCx(i)) PCxnew(i,1) = NaN; PCynew(i,1) = NaN; J(i,1) = NaN; else whichoneX = find(min(abs(CX - PCx(i))) == abs(CX - PCx(i))); PCxnew(i,1) = CX(whichoneX(1)); whichoneY = find(min(abs(CY - PCy(i))) == abs(CY - PCy(i))); PCynew(i,1) = CY(whichoneY(1)); J(i,1) = sub2ind([bins,bins],whichoneX(1),whichoneY(1)); end end

for i = 1:bins for j = 1:bins temp = sub2ind([bins,bins],i,j); Jthese = find(J == temp); if ~isempty(Jthese) Ntemp = N(temp); Nthis = find(Nunique == Ntemp); plot(PCx(Jthese),PCy(Jthese),'.','color',colors(Nthis,:),'Markersize',Msize); hold on; end end end hold off;

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!