我正在使用Matlab 2019a,我想绘制正向量和负向量,在x轴之上的正向量和在x轴之下的负向量的图。以下代码可以正常工作,除了...
a)颜色和图例。我希望每个收入和运营支出矢量都具有相同的颜色和相应的图例条目。
b)我想让大多数为负的矢量(在这种情况下为opex)在它们为正时比在大多数情况下的正矢量(在这种情况下为收益)更靠近x轴。即在图表的正面总是总是高于运营支出。
我想以一种有效的方式编写它,以便可以将其推广用于更多的向量。谢谢!
'''All'''
Toluene
'''Gradient'''
Methanol Water
'''Isocratic'''
Acetone, Acetonitrile
'''HILIC'''
Methyltertbutylether
'''Gradient and Isocratic'''
N/A
'''Gradient and HILIC'''
Isopropanol
'''Isocratic and HILIC'''
N/A
答案 0 :(得分:1)
您可以通过存储条形图的句柄并分别设置颜色来实现(a)。
我在解释(b)表示要根据序列的平均值对堆栈顺序进行排序。
下面的代码可以扩展为更多数据系列。您需要为data
的每个元素提供一个标签。颜色来自parula
颜色图。 (如果愿意,您可以选择其他类似jet
的东西。)
[根据评论进行了编辑:]
data{1} = revenue;
data{2} = opex;
colors = parula(numel(data));
labels = {'Revenue','Opex'};
for i = 1:numel(data)
dataNeg{i} = data{i};
dataNeg{i}(data{i}>0) = 0;
dataPos{i} = data{i};
dataPos{i}(data{i}<0) = 0;
mdata(i) = nnz(dataPos{i}); % was: mean(data{i});
end;
[~,posOrder] = sort(mdata,'ascend');
[~,negOrder] = sort(mdata,'descend');
yDataPos = [dataPos{posOrder}];
yDataNeg = [dataNeg{negOrder}];
hold on;
bNeg = bar(yDataNeg,'stack');
bPos = bar(yDataPos,'stack');
for i= 1:numel(data)
set(bNeg(i),'FaceColor',colors(negOrder(i),:))
set(bPos(i),'FaceColor',colors(posOrder(i),:))
end;
legend(labels{:});
hold off;