用Matlab自定义绘图

用Matlab自定义绘图,matlab,plot,matlab-figure,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''和y4=['a''b''c''a'] 有了这些值,我想画一个图,将所有4次运行组合在一个图表中

我需要在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''
y4=['a''b''c''a']
有了这些值,我想画一个图,将所有4次运行组合在一个图表中。我想将Y值表示为一个1单位高(实际上它的高度不是那么重要)的彩色垂直线,而不仅仅是点。下图展示了我想要绘制的图形,有人知道实现这一点的方法吗?谢谢


以下是我的建议:

% 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
这将产生:


上面的代码针对您的问题非常具体,但很容易推广。其主要思想是创建数据的“图像”,并使用光栅技术来绘制它,而不是单独绘制每一行。

@ Memin,请考虑将此标记为解决方案,如果它解决了您的问题;