使用Matlab自定义绘图

时间:2016-05-09 23:14:27

标签: matlab plot matlab-figure

我需要在Matlab中绘制一个自定义绘图,实际上,我将把4个不同的图组合在一起,具体如下。比方说,我运行一个应用程序4次,到X轴的值将始终相同,因此对于每次运行,x1=x2=x3=x4=[1 2 3 4];

对于每个x点,都会有一个y点,一个集合A=('a','b','c'),

的元素

假设每次运行相应的Y值为:y1=['a' 'b' 'a' 'c']; y2=['a' 'a' 'b' 'c']; y3=['c' 'a' 'a' 'a'];y4=['a' 'b' 'c' 'a']; 有了这些值,我想绘制一个图,它将所有4个运行组合在一个图表中。我想将Y值表示为1个单位高(实际上它的高度不是那么重要)彩色垂直线,而不仅仅是点。下图展示了我想要绘制的图形,有谁知道实现这一目标的方法?感谢

The custom figure

1 个答案:

答案 0 :(得分:2)

以下是我的建议:

% orginal data:
x = 1:4;
y1 = 'abac';
y2 = 'aabc';
y3 = 'caaa';
y4 = 'abca';
Y = [y1;y2;y3;y4];
% convert to numeric:
y = Y-'a'+1;
y = rot90(y,3);
% create an "image" of the data:
res = 10;
ymesh = nan(size(y,1)*res,(size(y,2)+1)*res);
for ii = 1:size(y,1)
    for jj = 1:size(y,2)
        ymesh(res*(jj-1)+1:res*jj,res*ii) = y(ii,jj);
    end
end
% set the boundries between y categories
ymesh(res:res:size(ymesh,1)-res,:) = 4;
% plotting:
abcCol = [1 1 1;0 0.7 0;0.8 0 0;1 0.8 0;0 0 0];
xtic = res:res:length(ymesh)-1;
xticlable = num2str((1:size(y,1)).');
ytic = res/2:res:size(ymesh,1)-res/2;
yticlable = {'4^{th} run','3^{ed} run','2^{nd} run','1^{st} run'};
f = figure('Colormap',abcCol);
imagesc(ymesh)
set(gca,'Parent',f,'CLim',[0 4],...
    'YTickLabel',yticlable,'YTick',ytic,...
    'XTickLabel',xticlable,'XTick',xtic)
% add the legend on anoother 'fake' axes
legax = axes('Parent',f);
p = plot(nan(2,3),'Linewidth',3);
set(p,{'Color'},mat2cell(abcCol(2:end-1,:),[1 1 1].',3));
legend (unique(Y))
axis off

这将创造这个:

Custom plot

上面的代码非常具体针对您的问题,但可以轻松推广。主要思想是创建数据的“图像”,并使用栅格技术绘制它,而不是分别绘制每一行。