首页 文章

使用Matlab自定义绘图

提问于
浏览
2

我需要在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 回答

  • 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

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

相关问题