multi bar labeling plot
    24 次查看(过去 30 天)
  
       显示 更早的评论
    
I want to label each three bars as p1, p2 and p3 for all at the base as the pic attached.. i appreciate any help someone can provide.
2 个评论
采纳的回答
  Adam Danz
    
      
 2019-5-16
        
      编辑:Adam Danz
    
      
 2021-12-10
  
      Here's how to locate the center of each grouped bar and label them.  
Starting in Matlab R2019B, the center of each bar is stored in 
h = bar(___);
h.XEndPoints % x centers
h.YEndPoints % y endpoints
Prior to Matlab R2019B, you can use an undocumented property "XOffset".  This was developed and tested in r2019a.
xCnt are the bar centers.  
% Generate grouped bar plot
figure()
v = randi(20,12,3); 
h = bar(v,.8); 
% Get group centers
xCnt = get(h(1),'XData') + cell2mat(get(h,'XOffset')); % XOffset is undocumented!
% Create Tick Labels
xLab = repmat({'p1','p2','p3'},1,numel(xCnt)/3); 
% Set individual ticks
set(gca, 'XTick', sort(xCnt(:)), 'XTickLabel', xLab)
Alternatively, you could rotate the x tick labels
set(gca, 'XTick', sort(xCnt(:)), 'XTickLabel', xLab, 'xticklabelrotation', 90)
% Or use xtickangle():  https://www.mathworks.com/help/matlab/ref/xtickangle.html
The best solution would be to use a legend
legend(h,{'p1','p2','p3'})

8 个评论
  Adam Danz
    
      
 2019-5-19
				
      编辑:Adam Danz
    
      
 2019-5-19
  
			% xLab are the labels for each individual bar.  The pattern you want is the following:
% for every odd triplet, you want [nothing, #, nothing] 
% and for every even triplet you want [p#, p#, p#]. 
% We already have the p# labels so we just need to alter the odd number groups. 
% Step 1) Identify the odd number groups. 
isOdd = repmat(logical([1,1,1,0,0,0]),1,length(xLab)/6);
% Step 2) Create new labels
newLabs = strsplit(sprintf('| |%d| |', 1:2:length(xLab)/3),'|'); 
newLabs(cellfun(@isempty, newLabs)) = []; 
% Step 3) replace the p# labels for odd groups with [nothing, #, nothing]
xLab(isOdd) = newLabs; 
% Step 4) assing newlabels to plot
set(gca, 'XTick', sort(xCnt(:)), 'XTickLabel', xLab, 'xticklabelrotation', 90)
更多回答(2 个)
  Sulaymon Eshkabilov
      
 2019-5-16
        Hi Ali,
Here is a simple solution to your problem:
A= randi([15, 25], 13, 3); % Insert your data here
H = bar(A); shg
H(1).FaceColor='g'; 
H(2).FaceColor='r';
H(3).FaceColor='b';
Good luck.
  Sergio Yanez-Pagans
      
 2021-8-21
        1 个评论
  Adam Danz
    
      
 2021-8-21
				Cool function, but how does that address the question of how to label the bar groups?
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Axis Labels 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





