代码之家  ›  专栏  ›  技术社区  ›  Gabriel Maia

如何设置绘图中线条之间的间距?

  •  1
  • Gabriel Maia  · 技术社区  · 7 年前

    我正在使用矩阵的数据(很多乘以3)来制作一个三维图形。我需要在图表中指定跳转行(或行与行之间的空格)。我找不到可以设置这个的命令?

    这是代码,非常简单。我不能共享数据文件,但它很大,就像行的nubmers和3列一样。我想配置图表 好像它只在图中每5行显示1行 .

    k= fopen('propagation.dat','r'); 
    p= textscan(k,'%f %f %f'); 
    fclose(k); % fecha o arquivo
    xn=p{1,1};
    yn=p{1,2};
    zn=p{1,3};
    plot3(xn,yn,zn,'linewidth',0.1)
    xlabel('Name X')
    ylabel('Name Y')
    zlabel('Name Z')
    title('Title')
    

    Graph here

    2 回复  |  直到 7 年前
        1
  •  0
  •   Cris Luengo    7 年前

    我可以复制你的情节,我认为你的数据是这样的:

    [xn,yn] = meshgrid(linspace(0,0.5,14),linspace(-15,15,100));
    zn = exp(-2*yn.^2).*xn;
    xn = xn(:);
    yn = yn(:);
    zn = zn(:);
    
    figure
    plot3(xn,yn,zn)
    set(gca,'ylim',[-10,10],'zlim',[0,2]);
    box off
    

    enter image description here

    这里你要做的是画一条线,所以第一条线的终点,连接到第二条线的起点。这会在数据行之间创建一条对角线和直线。为避免显示这些行,请在每行末尾向数据添加NaN值。你可以这样做:

    index = find(diff(yn)<0);
    zn(index) = nan;
    
    figure
    plot3(xn,yn,zn)
    set(gca,'ylim',[-10,10],'zlim',[0,2]);
    box off
    

    enter image description here

    在修复之后,如果您想进一步减少绘制的线的数量,您需要删除整条线,而不是像在另一个答案中那样沿着每一条线删除单独的点。这有点复杂,但可以这样完成:

    len = index(1);
    index = [0;index]+1;
    index = index(1:3:end); % every 3rd line -- change to select how many lines to plot
    elems = ((0:len) + index).'; % implicit singleton expansion
    %elems = bsxfun(@plus,0:len,index).'; % use this instead if the previous line doesn't work
    elems = elems(:);
    xn = xn(elems);
    yn = yn(elems);
    zn = zn(elems);
    
    figure
    plot3(xn,yn,zn)
    set(gca,'ylim',[-10,10],'zlim',[0,2]);
    box off
    

    enter image description here

        2
  •  0
  •   Xiangrui Li    7 年前

    改变你的 plot3 行到以下位置:

    plot3(xn(1:5:end), yn(1:5:end), zn(1:5:end), 'linewidth', 0.1)