代码之家  ›  专栏  ›  技术社区  ›  sancho.s ReinstateMonicaCellio

倍频程:将次Y轴添加到现有绘图

  •  3
  • sancho.s ReinstateMonicaCellio  · 技术社区  · 6 年前

    我使用的是Win10下的8度4.2.1便携式。

    我在一个图表中有几个图,每个图都有一个y轴,每个图都是用 plot(...) 句子。 我想在现有的绘图中添加一个次y轴上的绘图,而不是从头创建两个轴 plotyy , 编辑 )并且能够完全相同地工作,例如,添加一个图例等。

    这个的正确用法是什么?

    如果我执行

    plotyy(x, ysec) ;
    

    ax = gca ;
    plotyy(ax, x, ysec) ;
    

    我得到

    error: Invalid call to plotyy.  Correct usage is:    
     -- plotyy (X1, Y1, X2, Y2)
     -- plotyy (..., FUN)
     -- plotyy (..., FUN1, FUN2)
     -- plotyy (HAX, ...)
     -- [AX, H1, H2] = plotyy (...)
    

    This 为Matlab显示了类似的代码,但我不确定所有与创建的次轴一起工作的代码 普罗提 ,也将使用这样创建的轴。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Cris Luengo    6 年前

    这里有两个选择。我已经在Matlab中测试过了,但我很确定它也会以同样的方式在倍频程下工作。

    让我们从一些正常绘制的随机数据开始:

    % Initial graph
    x1 = linspace(0,1,100);
    y1 = randn(size(x1));
    clf
    plot(x1,y1,'k');
    
    % New data
    x2 = x1;
    y2 = rand(size(x2));
    

    复制图形,在第二个轴中添加新数据

    在这里,我们从当前轴检索数据(当然,如果保留第一次绘图时的轴句柄,效果会更好)。然后我们使用 plotyy 包含旧数据和新数据的。

    ax = gca;
    h0 = get(ax,'children'); % This is the handle to the plotted line
    x1 = get(h0,'xdata');    % Get data for line
    y1 = get(h0,'ydata');
    cla(ax)                  % Clear axes
    plotyy(ax,x1,y1,x2,y2);  % Plot old and new data
    

    plot with left and right axis

    保留现有轴并打印,使用新数据添加第二个轴

    这里我们使用 hold on 若要防止删除当前数据,请使用 普罗提 这也会在左轴上添加一个虚拟图(单点0,0)。然后我们删除这个虚拟图。

    事实证明,添加这个虚拟图仍然会导致左轴发生变化。因此,此代码首先保留刻度线的位置和限制,然后在打印后再次应用这些限制。它也使得左轴的颜色与已经存在的线相同。

    ax = gca;
    yl = get(ax,'ylim');
    yt = get(ax,'ytick');
    h0 = get(ax,'children');
    hold on
    [ax,h1,h2] = plotyy(ax,0,0,x2,y2);
    delete(h1)
    set(ax(1),'ycolor',get(h0,'color'),'ylim',yl,'ytick',yt)
    

    plot with left and right axis