function intplot(trait, mark1, mark2, mnames) %make an interaction plot K = max(max([mark1, mark2]))+1; %2 for BC, 3 for F2 means = zeros(K,K); ns = zeros(K,K); stds = zeros(K,K); for i = 1:K for j = 1:K means(i,j) = mean(trait(find(mark1==i-1 & mark2==j-1))); ns(i,j) = length(trait(find(mark1==i-1 & mark2==j-1))); if ns(i,j) > 2 stds(i,j) = std(trait(find(mark1==i-1 & mark2==j-1))); end end end stds = stds./sqrt(ns); plot(means,'-d') axis([0.5 K+0.5 .9*min(min(means-stds)), 1.1*max(max(means+stds))]) hold on for i = 1:K for j = 1:K plot([i,i]',[means(i,j)-stds(i,j),means(i,j)+stds(i,j)]','+:') end end set(gca,'XTick',[1:K]) if K == 2 set(gca,'XTickLabel',['AA';'AB']) else set(gca,'XTickLabel',['AA';'AB';'BB']) end if nargin > 3 xlabel(mnames(1)) end text(K+0.25, means(K,1), 'AA') text(K+0.25, means(K,2), 'AB') if K == 3 text(K+0.25, means(K,3), 'BB') end if nargin > 3 gtext(mnames(2)); end hold off