I think that I figured this out. The trick is to do two graphs and to seperate out the positive and negative values:
>> X = rand(4,3) - 0.5;
>> Xneg = X;
>> Xneg(Xneg>0) = 0;
>> Xpos = X;
>> Xpos(Xpos<0) = 0;
>> hold on
>> bar(Xneg,'stack')
>> bar(Xpos,'stack')
>> hold off