【问题标题】:Custom plot with Matlab使用 Matlab 自定义绘图
【发布时间】:2016-05-09 23:14:27
【问题描述】:

我需要在 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 个单位高(实际上它的高度并不重要)彩色垂直线,而不仅仅是点。下图演示了我要绘制的图形,有人知道实现此目的的方法吗?谢谢

【问题讨论】:

    标签: matlab plot matlab-figure


    【解决方案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 如果它解决了您的问题,请考虑将其标记为解决方案;)
    猜你喜欢
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多