我有1月的3个温度值,2月的3个温度值和3月的1个温度值。我想将它们绘制在一个条形图上。我在matlab中使用了overlay方法绘制了1月的3个值。但是当我另外两个月绘制时,它们覆盖了一月份。如何强制将2月份和3月份的值与1月份并存。
更新:我在下面添加了运行代码的输出,以及想要的更改
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')
答案 0 :(得分:3)
您的代码的主要问题在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;
我得到的输出看起来像这样:
希望有帮助!