Matlab 我需要在2个子批次中绘制吞吐量与时间和接收功率与时间的关系

Matlab 我需要在2个子批次中绘制吞吐量与时间和接收功率与时间的关系,matlab,plot,matlab-figure,Matlab,Plot,Matlab Figure,我使用以下MATLAB代码绘制以下图表: figure a1=subplot(2,1,1) plot(t_warp,tp_warp,'-bo','Linewidth',1); ylim([0,30]) datetick('x',13) xlabel('Time [02-11-2015] '); ylabel('TP (54Mbps) '); grid on; a2=subplot(2,1,2) errorbar(t_warp,rx_pow_warp,rx_err_warp,'-rd','

我使用以下MATLAB代码绘制以下图表:

figure
a1=subplot(2,1,1)
plot(t_warp,tp_warp,'-bo','Linewidth',1);
ylim([0,30])
datetick('x',13) 
xlabel('Time [02-11-2015]  ');
ylabel('TP (54Mbps) ');
grid on; 

a2=subplot(2,1,2)
errorbar(t_warp,rx_pow_warp,rx_err_warp,'-rd','Linewidth',1);
ylim([-30,-75])
datetick('x',13) 
xlabel('Time [02-11-2015] ');
ylabel('Received power (dBm) with deviaton ');
grid on;

  • 如何同步X轴上的两个时间戳?在上面生成的图中,X轴时间戳在图形之间不同步。编辑:使用链接轴([a1,a2],'x'),两个时间戳同步
  • 如何设置X轴的时间限制?即14:00:00-23:00:00,每小时显示间隔
  • 编辑:

    figure
    
    a1=subplot(2,1,1)
    plot(t_warp,tp_warp,'-bo','Linewidth',1);
    space = 0.05*(max(t_warp)- min(t_warp));
    xlim([min(t_warp)-space, max(t_warp)+space])
    set(gca,'xTick',min(t_warp):0.1:max(t_warp)) % SHOW INTERMEDIATE POINT IN X axis
    set(gca,'xTickLabel',min(t_warp):0.1:max(t_warp))
    
    ylim([0,30])
    set(gca,'yTick',0:1:30)
    datetick('x',13) 
    xlabel('Time [02-11-2015]  ');
    ylabel('TP  ');
    grid on; 
    
    
    a2=subplot(2,1,2)
    errorbar(t_warp,rx_pow_warp,rx_err_warp,'-rd','Linewidth',1);
    space = 0.05*(max(t_warp)- min(t_warp));
    % xlim([min(t_warp)-space, max(t_warp)+space])
    set(gca,'xTick',min(t_warp):0.1:max(t_warp)) % SHOW INTERMEDIATE POINT IN X axis
    set(gca,'xTickLabel',min(t_warp):0.1:max(t_warp))
    ylim([-70,-55])
    set(gca,'yTick',-70:1:-55)
    datetick('x',13) 
    %axis tight
    xlabel('Time [02-11-2015] ');
    ylabel('Received power (dBm) with deviaton ');
    grid on;
    
    linkaxes([a1,a2],'x')
    
    获得的图表:


    问:两个图形的X轴仍然不是从14:00:00开始的?以及如何为两个图形在X轴上固定相同的边距?

    与我前面的评论相关,您可能希望使用
    xlim
    作为

    xlim([min(t_warp), max(t_warp)])
    
    如果您不希望数据直接从轴上开始,并且中间有一些空间,您可以通过以下方式进行操作

    [floor(min(...)) ceil(max(...))]
    
    或者

    relspace = 0.05;
    absspace = relspace*(max(t_warp)- min(t_warp));
    xlim([min(t_warp)-absspace , max(t_warp)+absspace])
    

    其中
    relspace
    使用数据范围设置与轴的距离。

    我调整了上述示例 您可以使用

    ticks = (get(gca,'Xtick'));
    
    然后你可以在第二张图中插入它们

    set(gca,'Xtick',ticks)
    
    这应该可以解决问题。您可能还需要将日期转换为
    xlim
    下面是一个较长的示例

    close all
    clear all
    
    t = datetime('now','TimeZone','local','Format','d-MMM-y HH:mm:ss Z');
    t2 = t+100;
    t3 = t+300;
    
    subplot 311
    plot(t:t2,rand(size(t:t2)))
    xlim([datenum(min(t)), datenum(max(t2,t3))])
    ticks = (get(gca,'Xtick'));
    grid on
    
    subplot 312
    plot(t:t3,rand(size(t:t3)))
    grid on 
    
    subplot 313
    plot(t:t3,rand(size(t:t3)))
    xlim([datenum(min(t)), datenum(max(t2,t3))])
    set(gca,'Xtick',ticks)
    grid on
    

    您可以像使用ylim一样使用xlim([])。。。。两个子批次中都有类似于
    xlim([0.9*min(t\u扭曲),1.1*max(t\u扭曲)])
    。然后,两个图的网格都是相似的……它可以工作。谢谢。使用0.9和1.1后面的逻辑是什么?@ OrthHooHe因为OP提到你的评论是工作的,请考虑回答它。这有利于你获得一些声誉,从而减少未回答的问题。使用你的方法,我重新绘制了图表,但我已附在编辑部分。