并排执行不同的条形图

时间:2019-06-19 04:28:58

标签: matlab plot matlab-figure

我有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')

enter image description here

1 个答案:

答案 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;

我得到的输出看起来像这样:

Output

希望有帮助!