在 Matlab 中围绕原始数据绘制附加线 w/o 调整绘图 Window

Plotting Additional Line w/o adjusting Plot Window around Original Data in Matlab

我在 Matlab 中有一个数据散点图,以及一个水平线图,它划分了该数据的两个子组 - 所有这些都在同一个图上。我使用 hold on 命令分别绘制了这两个实体。

理想情况下,我希望绘图 window 自动调整为散点图数据,并且希望我绘制的水平线在所有情况下都简单地延伸出屏幕。有没有简单的方法可以做到这一点?

当我改变水平线的界限时,图表 window 移动以适应这些点,扭曲了我真正感兴趣的散点图数据的视图。

示例:

% central line segment
boundary_line = plot(csv_results.data(:,9),csv_results.data(:,10));

% negative extension of line segment off screen
line_negext = plot([-10,csv_results.data(1,9)],[csv_results.data(1,10),csv_results.data(1,10)]);

% positive extension of line segment off screen
line_posext = plot([10,csv_results.data(6,9)],[csv_results.data(6,10),csv_results.data(6,10)]);

% scatterplot data of interest
scatt_data = plot(csv_results.data(:,3),csv_results.data(:,4));

更新:我的问题是,如我上面的代码所示,我需要在不同的 y 值处绘制两条线段,这些线段继续为正无穷大和负无穷大,link 到现有图中间。如果我使用 yline 我可以简单地画一条水平线 - 如果我使用 xlim 我冒着为后续运行裁剪数据的风险..

如果要将轴调整到更严格的部分(减少),则 xlim() and ylim() get the job done. Horizontal lines drawn by yline() will persist, as will vertical lines drawn by xline()。请注意,xline()yline() 应该适用于包括 R2018b 及更高版本在内的版本。

% MATLAB R2019a
% Sample Data
n = 10;
X1 = 5*rand(n,1);
Y1 = 5*rand(n,1);
X2 = 5 + 5*rand(n,1);
Y2 = 5 + 5*rand(n,1);

figure, hold on
yline(5) 
scatter(X1,Y1,'bo')
scatter(X2,Y2,'rd')
scatter(X1,Y2,'ks')
xlim([0 5])

请注意,为更大的 x 轴范围调用 xlim() 也会扩展水平线。

xlim([-1,12])

如果在 xlim() 之后绘制超出范围的新数据,绘图将不会自动调整。但是,如果您在调用 xlim() 之前这样做,那么水平线将会扩展。试试下面的例子。

figure, hold on
yline(5) 
scatter(X1,Y1,'bo')
scatter(X2,Y2,'rd')
scatter(X1,Y2,'ks')

然后立即执行

scatter(100*rand(n,1),Y1)

并看到水平线已经扩展到覆盖新的、更长的 x 轴。


发布此答案后,我发现: