我想绘制一张与下图中的on完全相同的条形图。
我无法做的是绘制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
有任何提示吗?
答案 0 :(得分:4)
要处理不同的缩放比例,您可以手动将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)
答案 1 :(得分:4)
以下是一个例子:
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
结果: