在Matlab中围绕原始数据绘制附加线(不带调整绘图窗口)

在Matlab中围绕原始数据绘制附加线(不带调整绘图窗口),matlab,plot,axis,scatter-plot,horizontal-line,Matlab,Plot,Axis,Scatter Plot,Horizontal Line,我在Matlab中有一个数据散点图,以及一个水平线图,它将这些数据分成两个子组——所有数据都在同一个图上。我使用hold on命令分别绘制了这两个实体 理想情况下,我希望绘图窗口自动调整为仅显示散点图数据,并且希望我绘制的水平线在所有情况下都能简单地延伸到屏幕之外。有没有一个简单的方法可以做到这一点 当我更改水平线的限制时,图形窗口会移动以适应这些点,从而使我实际感兴趣的散点图数据的视图发生倾斜 例如: % central line segment boundary_line = plot(cs

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

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

当我更改水平线的限制时,图形窗口会移动以适应这些点,从而使我实际感兴趣的散点图数据的视图发生倾斜

例如:

% 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));

Update:我的问题是,正如我上面的代码中所看到的,我需要绘制两个不同Y值的线段,它们持续到正无穷大和负无穷大,这与中间的一个现有的情节联系起来。如果我使用

yline
我可以简单地画一条水平线-如果我使用
xlim
我会冒着为后续运行裁剪数据的风险。

如果要将轴调整为限制性更强的部分(减少),请单击并完成作业。由绘制的水平线将保持不变,由绘制的垂直线也将保持不变。请注意,
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轴。


发布这个答案后,我发现:

如果要将轴调整为限制性更强的部分(减少),请单击并完成作业。由绘制的水平线将保持不变,由绘制的垂直线也将保持不变。请注意,
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轴。



贴出这个答案后,我发现:

你试过了吗?您是否可以使用
xlim([xL xR])
使绘图仅显示从
xL
xR
的x轴?您是使用还是手动绘制水平线?谢谢您的提示!我目前正在手动绘制水平线…感谢代码更新。您使用的是什么版本的MATLAB?谢谢您的回答!我使用的是2018-我的问题是,正如我上面的代码中所看到的,我需要绘制两个不同的Y值的线段,它们持续到正无穷大和负无穷大,这与中间的一个现有的情节联系起来。如果我使用
yline
我可以简单地画一条水平线-如果我使用
xlim
我会冒着为后续运行裁剪数据的风险..你试过了吗?您是否可以使用
xlim([xL xR])
使绘图仅显示从
xL
xR
的x轴?您是使用还是手动绘制水平线?谢谢您的提示!我目前正在手动绘制水平线…感谢代码更新。您使用的是什么版本的MATLAB?谢谢您的回答!我使用的是2018-我的问题是,正如我上面的代码中所看到的,我需要绘制两个不同的Y值的线段,它们持续到正无穷大和负无穷大,这与中间的一个现有的情节联系起来。如果我使用
yline
我可以简单地画一条水平线-如果我使用
xlim
我有可能为后续运行裁剪数据。。