MATLAB: Two labels for xaxis for bar graph

figure handle

Hi
I have array of some positive and negative values and draw bar graph. I want to label top and bottom of x-axis based upon positive and negative values.

Best Answer

Per above, you must have a second axes. And, you can do it with only one bar plot instead of two...
ip=(a>=0); % logical vector
in=find(~ip); % convert to position array for negative
ip=find(ip); % ditto now for negative
figure(1)
hBar=bar(a); % draw bargraph, all data first..
hAx=gca; % get axes handle
hAx(2)=axes('Position',hAx.Position,'XAxisLocation','top','Color','none'); % make the second axes
hAx(2).Xlim=hAx(1).Xlim; % make limits match
hAx(2).Ylim=hAx(1).Ylim; hAx(2).YTick=''; % and hide y axis labels
set(hAx,'Box','off'); % so ticks don't show on opposite axis
% now fixup the bar plot to look as desired...
hBar.Color='flat'; % so can use CData array for colors by bar
hBar.CData(in,:)=repmat([1 0 0],numel(in),1); % negative bars red
set(hAx(1),'xtick',in,'xticklabel',name(in),'fontsize',8);xtickangle(hAx(1),90)
set(hAx(2),'xtick',ip,'xticklabel',name(ip),'fontsize',8);xtickangle(hAx(1),90)
Caveat: Air code; I did a sample with made up data here to get the desired effect and then edited on your code to try to match...may be a few typos or oversights but idea will work...the figure I had here that used data from another earlier Answers Q? that was counting letters in a string <Answers/515440-how-can-i-create-a-array-of-letters-from-a-sentence> for the data (the data plotted here are the counts minus mean counts excluding the blanks):