在matlab中,有没有一种实用的方法来使多个绘图的xlim和ylim相同?

tyky79it  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(366)

我一直在尝试在MatLab中创建多个情节的单个图形。尽管我设法为4个地块设置了许多功能,但我不能为这四个地块设置完全相同的xlim和ylim。我曾尝试使用*‘链接轴’*函数在MATLAB中,但它不能很好地工作。有什么办法可以让这成为可能吗?
You can see my current plotting settings here in which I had tried to use hold on function to plot multiple figures at the same time, however, I cannot add xlim([-99 1000]) and ylim([45 70]) here, I need an x-axis as -99:10:1000 and y-axis as 45:5:70
在这里,您可以看到我的绘图的当前输出,其中xlim和ylim不是我想要的:

附注:明文代码:

nTime = 110;
axx = linspace(-99, 1000, nTime);

figure
hold on
plot(axx, allSubjsMeanH+50, 'linewidth', 4);
plot(axx, allSubjsMeanL+50, 'linewidth', 4);
xline(0,'--', 'linewidth', 1);
yline(50,'--', 'linewidth', 1);
plot(axx(significantH), -1, 'b*', 'linewidth', 1);
plot(axx(significantL), -3, 'r*', 'linewidth', 1);
xlabel('Time (ms)', 'FontSize', 13)
ylabel('Accuracy (%)', 'FontSize', 13)
title('Headline', 'FontSize', 13)
legend('H','L')

% Set figure position and size
rectFig = get(gcf,'position');
width=700;
height=300;
set(gcf,'position',[rectFig(1),rectFig(2),width,height], 
'color', 'white');

% What I need to include but I couldn't:
xlim([-99 1000]);
ylim([45 70]);

% What I've tried to use:
linkaxes(axx, 'xlim', 'ylim')

P.S.2当我以这种方式运行代码时,我可以以我需要的方式获得xlim和ylim,然而,这次我丢失了与signantH和signantL的曲线图相关的信息。我需要的是得到与Xlim和Ylim是固定的4个地块相关的信息。

figure
hold on
plot(axx, allSubjsMeanH+50, 'linewidth', 2);
plot(axx, allSubjsMeanL+50, 'linewidth', 2);
xline(0,'--', 'linewidth', 1); 
yline(50,'--', 'linewidth', 1);
plot(axx(significantH), -1, 'b*');
plot(axx(significantL), -3, 'r*');
hold on
xlim([-99,1000]);
ylim([45,70]);
xlabel('Time (ms)', 'FontSize', 13)
ylabel('Accuracy (%)', 'FontSize', 13)
title('Headline', 'FontSize', 13)
legend('H','L')

Here you can see the output of it

ahy6op9u

ahy6op9u1#

函数linkaxes用于链接不同轴对象(即图形或绘图区域)的x和/或y和/或z轴。在您的示例中,您只有一个轴对象。函数linkaxes在这里毫无意义。
根据我从你的问题中了解到的,你希望对你的四个情节中的两个使用不同的y轴。
这可以使用函数yyaxis来实现。无论您想要在左轴还是右轴上绘图,都必须在plot指令之前添加yyaxis leftyyaxis right
ylim函数将应用于当前选定的yAxis。

qyuhtwio

qyuhtwio2#

使用subplotaxis,我可以在同一图中获得所有4个轨迹allSubjsMeanH+50allSubjsMeanL+50significantHsignificantL

clear all;close all;clc

nTime = 110;
axx = linspace(-99, 1000, nTime);

% simulating data
all_1=randi([50 70],1,nTime);
all_2=randi([50 70],1,nTime);
t1=randi([1 nTime],1,nTime);
t2=randi([1 nTime],1,nTime);

figure(1)
    
ax1=subplot(2,1,1)
hold(ax1,'on')
grid(ax1,'on')
plot(ax1,axx, all_1, 'linewidth', 4);
plot(ax1,axx, all_2, 'linewidth', 4);
xline(ax1,0,'--', 'linewidth', 1);
yline(ax1,50,'--', 'linewidth', 1);

xlabel(ax1,'Time (ms)', 'FontSize', 13)
ylabel(ax1,'Accuracy (%)', 'FontSize', 13)

title(ax1,'Headline1', 'FontSize', 13)
legend(ax1,'H','L')

ax2=subplot(2,1,2)
hold(ax2,'on')
grid(ax2,'on')
    
hp3=plot(ax2,axx(t1), -1*ones(1,numel(t1)), 'b*', 'linewidth', 1);
hp4=plot(ax2,axx(t2), -3*ones(1,numel(t2)), 'r*', 'linewidth', 1);
axis(ax2,[axx(1) axx(end) -5 5])

xlabel(ax2,'Time (ms)', 'FontSize', 13)
ylabel(ax2,'Accuracy (%)', 'FontSize', 13)

title(ax2,'Headline2', 'FontSize', 13)
legend(ax2,'H','L')

相关问题