1

我在 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));

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

4

1 回答 1

3

显示水平线的图像

如果您想将轴调整到更严格的部分(减少),然后xlim()完成ylim()工作。绘制的水平线yline()将保持不变,由 绘制的垂直线也将保持不变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])

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

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 中绘制水平线和垂直线?

于 2019-12-17T16:58:48.513 回答