How to insert two X axis in a Matlab a plot

后端 未结 3 2103
悲哀的现实
悲哀的现实 2020-12-01 12:51

I would like create a Matlab figure with a double X axis (m/s and km/h) with the same plot.

I have found plotyy and - in Matlab reposity - plotyyy, but I am looking

相关标签:
3条回答
  • 2020-12-01 13:25

    As a very simple alternative you could also create a 2nd axis (transparent) and put it below the first one so that you only see the x axis.

    Example:

    clear
    clc
    close all
    
    x = 1:10;
    
    x2 = x/3.6;
    
    y = rand(size(x));
    
    hP1 = plot(x,y);
    
    a1Pos = get(gca,'Position');
    
    %// Place axis 2 below the 1st.
    ax2 = axes('Position',[a1Pos(1) a1Pos(2)-.05 a1Pos(3) a1Pos(4)],'Color','none','YTick',[],'YTickLabel',[]);
    
    %// Adjust limits
    xlim([min(x2(:)) max(x2(:))])
    
    text(2.85,0 ,'m/s','FontSize',14,'Color','r')
    text(2.85,.05 ,'km/h','FontSize',14,'Color','r')
    

    Output:

    enter image description here

    Then you can manually add the x labels for each unit, in different color for example.

    0 讨论(0)
  • 2020-12-01 13:45

    The best way i can think to do it is to use 2 plots, for example, you can split the plot into a large and small section by doing something like this:

    subplot(100, 1, 1:99) // plot your graph as you normally would
    plot(...
    
    subplot(100, 1, 100) // Plot a really small plot to get the axis
    plot(...)
    b = axis()
    axis([b(1:2), 0, 0]) // set the y axis to really small
    

    This is untested, you might need to fiddle around a little but it should hopefully put you on the right track.

    0 讨论(0)
  • 2020-12-01 13:47

    You can do something like the following. In comparison to the solution of @Benoit_11 I do use the normal Matlab labels and refer to both axes with handles so the assignments are explicit.

    Example Plot

    The following code creates an empty x-axis b with the units m/s with a negligible height. After this, the actual plot is drawn in a second axes a located a bit above the other axes and with units km/h. To plot on a specific axes, insert the axes-handle as the first argument of stem. The conversion from m/s to km/h is directly written in the call to stem. Finally, it's needed to set the xlim-property of the both axes to the same values.

    % experimental data
    M(:,1) = [ 0,  1,  2,  3,  4,  5];
    M(:,3) = [12, 10, 15, 12, 11, 13];
    
    % get bounds
    xmaxa = max(M(:,1))*3.6;    % km/h
    xmaxb = max(M(:,1));        % m/s
    
    
    figure;
    
    % axis for m/s
    b=axes('Position',[.1 .1 .8 1e-12]);
    set(b,'Units','normalized');
    set(b,'Color','none');
    
    % axis for km/h with stem-plot
    a=axes('Position',[.1 .2 .8 .7]);
    set(a,'Units','normalized');
    stem(a,M(:,1).*3.6, M(:,3));
    
    % set limits and labels
    set(a,'xlim',[0 xmaxa]);
    set(b,'xlim',[0 xmaxb]);
    xlabel(a,'Speed (km/h)')
    xlabel(b,'Speed (m/s)')
    ylabel(a,'Samples');
    title(a,'Double x-axis plot');
    
    0 讨论(0)
提交回复
热议问题