Основная проблема с вашим кодом в 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;
Вывод, который я получаю, выглядит следующим образом:

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