Matlab - гистограмма с двумя графиками и двумя осями - PullRequest
0 голосов
/ 08 ноября 2019

Я строю два массива на одном. На линейчатом графике должны отображаться две оси 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 разделяет графики, что приводит к двум графикам, сложенным вместе . Я хочу, чтобы графики стояли рядом для каждой ячейки, как это видно в в этом примере .

1 Ответ

2 голосов
/ 08 ноября 2019

Вы можете сделать это, манипулируя позицией 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');

example output from r2018b

...