有没有一种实用的方法可以使 MATLAB 中的多个绘图的 xlim 和 ylim 相同?

问题描述 投票:0回答:2

我一直在尝试在 MATLAB 中创建多个绘图的单个图形。尽管我设法包含了为 4 个图设置的许多功能,但我无法为这四个图设置相同的 xlim 和 ylim 。我曾尝试在 MATLAB 中使用 'linkaxes' 函数,但效果不佳。有什么办法可以实现吗?

附注纯文本代码:

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

figure
hold on
plot(axx, allT+50, 'linewidth', 4);
plot(axx, allY+50, 'linewidth', 4);
xline(0,'--', 'linewidth', 1);
yline(50,'--', 'linewidth', 1);
plot(axx(sT), -1, 'b*', 'linewidth', 1);
plot(axx(sY), -3, 'r*', 'linewidth', 1);
xlabel('Time (ms)', 'FontSize', 13)
ylabel('Accuracy (%)', 'FontSize', 13)
title('Headline', 'FontSize', 13)
legend('T','Y')

% 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,但是,这次我丢失了与 sT 和 sY 图相关的信息。我需要的是获取与同一图中的 4 个图相关的信息,其中 xlim 和 ylim 是固定的。

figure
hold on
plot(axx, allT, 'linewidth', 2);
plot(axx, allY, 'linewidth', 2);
xline(0,'--', 'linewidth', 1); 
yline(50,'--', 'linewidth', 1);
plot(axx(sT), -1, 'b*');
plot(axx(sY), -3, 'r*');
hold on
xlim([-99,1000]);
ylim([45,70]);
xlabel('Arbitrary Unit', 'FontSize', 13)
ylabel('Arbitrary Unit', 'FontSize', 13)
title('Headline', 'FontSize', 13)
legend('T','Y')
matlab plot matlab-figure
2个回答
0
投票

函数

linkaxes
用于链接不同轴对象(即图形或绘图区域)的 x 和/或 y 和/或 z 轴。就您而言,您只有一个轴对象。函数
linkaxes
在这里毫无目的。

据我从你的问题中了解到,你希望对四个图中的两个使用不同的 y 轴。

这可以使用函数yyaxis来实现。 无论您想在左轴还是右轴上绘图,您都必须在

yyaxis left
指令之前添加
yyaxis right
plot

ylim
功能将应用于当前选择的y轴。


0
投票

使用

subplot
axis
我可以在同一个图中获得所有 4 条痕迹
allSubjsMeanH+50
allSubjsMeanL+50
significantH
significantL
:

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')

.

enter image description here

.

© www.soinside.com 2019 - 2024. All rights reserved.