在 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 轴。
发布此答案后,我发现:
我在 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 轴。
发布此答案后,我发现: