2016-07-22 82 views
4

我想绘制一张条形图,就像下图所示。MATLAB:如何绘制具有不同比例和不同数据集的多个水平条形图?

enter image description here

什么我不能做的就是绘制2组数据,一个上的“0”的左侧,并分别在一个在右边,使用每一个x轴上的不同比例。使用函数barh有关于如何移动基线的说明,但在这种情况下,有两组具有不同比例的不同数据。

作为例子,我试图绘制以下阵列:

left = [.1; .5; .4; .6; .3]; % Scale 0-1, grows leftwards 
right = [24; 17; 41; 25; 34]; % Scale 0-35, grows rightwards 

任何提示吗?

回答

3

要处理不同的缩放比例,您可以手动乘以left中的值进行缩放,然后修改该边的刻度线。

% Automatically determine the scaling factor using the data itself 
scale = max(right)/max(left); 

% Create the left bar by scaling the magnitude 
barh(1:numel(left), -left * scale, 'r'); 

hold on 
barh(1:numel(right), right, 'b')  

% Now alter the ticks. 
xticks = get(gca, 'xtick') 

% Get the current labels 
labels = get(gca, 'xtickLabel'); 

if ischar(labels); 
    labels = cellstr(labels); 
end 

% Figure out which ones we need to change 
toscale = xticks < 0; 

% Replace the text for the ones < 0 
labels(toscale) = arrayfun(@(x)sprintf('%0.2f', x), ... 
          abs(xticks(toscale)/scale), 'uniformoutput', false); 

% Update the tick locations and the labels 
set(gca, 'xtick', xticks, 'xticklabel', labels) 

% Now add a different label for each side of the x axis 
xmax = max(get(gca, 'xlim')); 
label(1) = text(xmax/2, 0, 'Right Label'); 
label(2) = text(-xmax/ 2, 0, 'Left Label'); 

set(label, 'HorizontalAlignment', 'center', 'FontWeight', 'bold', 'FontSize', 15) 

enter image description here

+0

非常感谢,这看起来几乎等同于一个在例子!如果你不介意,我还有两个问题可以使它更加相似。由于我只使用正值,你会知道是否有两种方法获得正值:另外,您是否知道是否可以在x轴上添加两个单独的标签,每个数据集都有一个标签? –

+0

@ Giovanni.R88更新 – Suever

+0

太棒了!非常感谢! –

3

下面是一个例子:

left = [.1; .5; .4; .6; .3]; % Scale 0-1, grows leftwards 
right = [24; 17; 41; 25; 34]; % Scale 0-35, grows rightwards 

ax_front = axes; 
b_front = barh(right,0.35); 
set(b_front,'facecolor',[0.2,0.4,1]) 
axis([-50,50,0,6]) 
axis off 

ax_back = axes; 
b_back = barh(-left,0.35) 
axis([-1,1,0,6]) 
set(b_back,'facecolor',[1,0.4,0.2]) 
set(gca, 'xtick', [-1:0.2:1]) 
set(gca, 'xticklabel', [[1:-0.2:0],[10:10:50]]) 
grid on 

axes(ax_front) % bring back to front 

结果:

enter image description here

相关问题