Обеспечение различных гистограмм бок о бок - PullRequest
0 голосов
/ 19 июня 2019

У меня есть 3 значения температуры для января, одно для февраля и одно для марта. Я хочу нарисовать их на одной гистограмме. Я использовал метод наложения в Matlab, чтобы нарисовать 3 значения для января. Но когда я планирую другие 2 месяца, они перекрывают январь. Как обеспечить, чтобы значения февраля и марта были рядом с январем.

Обновление : я добавил вывод запуска кода ниже, и изменения, которые я хочу иметь

temp_high = [12.5]; 
w1 = 0.5; 
bar(x,temp_high,w1,'FaceColor',[0.2 0.2 0.5])

temp_low = [10.7];
w2 = .25;
hold on
bar(x,temp_low,w2,'FaceColor',[0 0.7 0.7])

temp_very_low = [7.1];
w2 = .1;
hold on
bar(x,temp_very_low,w2,'FaceColor',[0 0 0.7])

ax = gca;
ax.XTick = [1]; 
ax.XTickLabels = {'January'};
ax.XTickLabelRotation = 45;

name={'feb';'march'};

y=[5 ;
 3   ]

bar_handle=bar(y);
set(gca, 'XTickLabel',name, 'XTick',1:numel(name))

ylabel('Temperature (\circF)')
legend({'jan 1-with 1-instance','jan 1-with 2-instance','jan 1-with 3-instance','feb', 'march'},'Location','northwest')

enter image description here

1 Ответ

3 голосов
/ 19 июня 2019

Основная проблема с вашим кодом в bar(y). Два значения в y неявно нанесены на значения x и 1 и 2. То, что вы хотите, это отобразить их на 2 и 3. Таким образом, вы должны явно указать эти значения.

Я позволил себе реорганизовать ваш код, собрав все данные о температуре, ширине и цветах в переменных. При этом все bar сюжеты могут быть выполнены за один цикл.

Вот код:

figure(1);
hold on;

% Collect all data.
temp = [1 12.5; 1 10.7; 1 7.1; 2 5; 3 3];
w = [0.5 0.25 0.1 0.5 0.5];
c = [0.2 0.2 0.5; 0 0.7 0.7; 0 0 0.7; 1 0 0; 0 0 1];

% Plot all temperatures within single loop.
for ii = 1:numel(w)
  bar(temp(ii, 1), temp(ii, 2), w(ii), 'FaceColor', c(ii, :));
end

% Decoration.
ticks = [1 2 3];
xlabels = {'January', 'February', 'March'};
set(gca, 'XTick', ticks, 'XTickLabel', xlabels);

ylabel('Temperature (\circF)');
legend({'jan 1-with 1-instance', 'jan 1-with 2-instance', 'jan 1-with 3-instance', 'feb', 'march'}, 'Location','northwest');

hold off;

Вывод, который я получаю, выглядит следующим образом:

Output

Надеюсь, это поможет!

...