image thumbnail
from scatter_histhist.m by Jeffrey
Takes vectors X and Y makes a scatter plot of X vs. Y and histograms of X and Y

[hm, hx, hy]=scatter_histhist(x, x_sig, y,y_sig, x_lim, y_lim)

function [hm, hx, hy]=scatter_histhist(x, x_sig, y,y_sig, x_lim, y_lim)
% [hm, hx, hy]=scatter_histhist(x, x_sig, y,y_sig, x_lim, y_lim)

org=0.15;
wdth=0.5;
hist_h=0.2;
num_bns=17;

	x_lim_b=[min(x)-0.1 max(x)+0.1];
	y_lim_b=[min(y)-0.1 max(y)+0.1];

if nargin==4;
	x_lim=x_lim_b;
	y_lim=y_lim_b;
end
	


figure

hx=axes('Position',[org org+wdth+0.01 wdth hist_h]);
hy=axes('Position',[org+wdth+0.01 org hist_h wdth]);
hm=axes('Position',[org org wdth wdth]);


marker_size=zeros(size(x))+12;
marker_size(x_sig==1)=24;
marker_size(y_sig==1)=24;
marker_size(x_sig+y_sig==2)=36;

% make the scatter plot
axes(hm);
scatter(x, y, marker_size,'k');
xlim(x_lim);
ylim(y_lim);
xhairs;
text(getx,gety,['n=' num2str(numel(x))])

% make the y-axis histogram
axes(hy);
bns=linspace(y_lim_b(1),y_lim_b(2),num_bns);
nsig=histc(y(y_sig==0), bns);
nsig=nsig(1:end-1);
sig=histc(y(y_sig==1), bns);
sig=sig(1:end-1);
cbns=edge2cen(bns);
[hh]=barh(cbns, [sig nsig],'stacked');
set(gca, 'YTick',[]);
ylim(y_lim);
set(gca, 'XAxisLocation','bottom');
set(hh(1),'FaceColor','k')
set(hh(2),'FaceColor',[1 1 1])
set(gca,'box','off')
set(gca,'Color','none')
text(getx,gety,[num2str(round(100*mean(y_sig))) '% p<0.05'])
y_mean=mean(y);
yt_sig=ttest(y);
if yt_sig
    hy_m=axes('Position',get(hy,'Position'));
    plot([0 1],[y_mean, y_mean],':k');
    set(hy_m, 'Visible','off')
   
end

% make the x-axis histogram

axes(hx);
bns=linspace(x_lim_b(1),x_lim_b(2),num_bns);
nsig=histc(x(x_sig==0), bns);
nsig=nsig(1:end-1);
sig=histc(x(x_sig==1), bns);
sig=sig(1:end-1);
cbns=edge2cen(bns);
[hh]=bar(cbns, [sig nsig],'stacked');
set(gca, 'XTick',[]);
xlim(x_lim);
set(gca, 'YAxisLocation','left');
set(hh(1),'FaceColor','k')
set(hh(2),'FaceColor',[1 1 1])
set(gca,'box','off')
set(gca,'Color','none')
text(getx,gety,[num2str(round(100*mean(x_sig))) '% p<0.05'])

x_mean=mean(x);
xt_sig=ttest(x);
if xt_sig
    hx_m=axes('Position',get(hx,'Position'));
    plot([x_mean, x_mean],[0 1],':k');
    set(hx_m, 'Visible','off')
   
end


function y=edge2cen(x)
b2b_dist=x(2)-x(1);
y=x+0.5*b2b_dist;
y=y(1:end-1);

function y=getx
x=xlim;
y=0.1*(x(2)-x(1))+x(1);

function y=gety
x=ylim;
y=0.9*(x(2)-x(1))+x(1);




Contact us at files@mathworks.com