Matlab - 带有两个图和两个轴的条形图

Matlab - Bar chart with two plots and two axis

我在一个图中绘制了两个数组。条形图必须显示两个 y 轴以及彼此相邻的条形图。当我想实现这两个要求时,问题就出现了。

我可以将条形图与

一起绘制
Y = [5,2; 8,7; 9,8; 5,5; 4,3];
figure
bar(Y)

或者我可以创建两个 y 轴(我目前使用我的数据):

y = [lr_flights2018, lr_income2018]; 
yyaxis left
b = bar(1:length(y),lr_flights2018);
ylabel('Life Rating/flights ratio')
yyaxis right
p = bar(1:length(y),lr_income2018);
ylabel('Life Rating/income ratio')
set(gca, 'XTick', 1:length(y))
set(gca,'XTickLabel',{countries{:,1}})
xtickangle(90)
title('Correlations with life rating');

在后者中 yyaxis 将导致 two plots stacked together 的地块分开。我希望每个箱子的地块并排放置,如图所示 this example.

您可以通过操纵 x 位置和条形宽度来做到这一点

我按如下所示操作了您的 Y 数据,并为示例中未提供的国家/地区制作了一些新标签

figure;
Y = [5,2; 8,7; 9,8; 5,5; 4,3];;
lr_flights2018 = Y(:,1);
lr_income2018 = Y(:,2);
y = [lr_flights2018, lr_income2018]; 
yyaxis left
b = bar((1:length(y))+0.125,lr_flights2018, 'barwidth', 0.25);
ylabel('Life Rating/flights ratio')
yyaxis right
p = bar((1:length(y))-0.125,lr_income2018, 'barwidth', 0.25);
ylabel('Life Rating/income ratio')
set(gca, 'XTick', 1:length(y))
str = strread ( sprintf ( '%i\n', [1:5] ), '%s', 'delimiter', '\n' )
set(gca,'XTickLabel',str)
xtickangle(90)
title('Correlations with life rating');