1

我有一些数据图(简单的二维线),我想在上面一些更有趣的点周围添加圆圈。令人惊讶的是,matlab 似乎没有简单的方法来创建物理上的圆形。我在互联网上查看,我发现的大多数答案是使用rectangle('Curvature',[1 1])orpts = linspace(0,2*pi, 100); plot(sin(pts), cos(pts));并将绘图的纵横比固定为 1。在我的情况下,轴的比例相差几个数量级,因此无法选择固定纵横比。

我正在尝试不同的方法来获得正确的 x/y 比例因子,但似乎我仍然遗漏了一些东西。我目前的尝试是:

function hc = circle(x, y, xr)

gca_ylim = get(gca, 'ylim');
gca_xlim = get(gca, 'xlim');
gca_pos = get(gca, 'Position');
gcf_pos = get(gcf, 'Position');

gcf_ar = get(gca, 'DataAspectRatio');

%mod = gca_pos(4)/gca_pos(3) *abs(gca_ylim(2)-gca_ylim(1))/abs(gca_xlim(2)-gca_xlim(1))*gcf_pos(3)/gcf_pos(4);
mod = gca_pos(4)/gca_pos(3)*gcf_ar(2)/gcf_ar(1)*gcf_pos(3)/gcf_pos(4);
yr = xr*mod;
rectangle('Position',[x-xr,y-yr,xr*2,xr*mod*2], 'Curvature',[1,1]);
end

我以这种方式得到的圆圈仍然有点拉长,我不知道为什么。如果有任何简单的方法可以在情节中获得圆圈 - 请分享。

PS 我知道,如果我调整绘图大小或向其中添加更多内容并更改缩放比例,圆圈将随着整个绘图重新缩放。在我的情况下这不是问题 - 无需手动操作(无需调整窗口大小)即可打印出图形,我可以将它们添加为最后一个对象。

4

2 回答 2

2

另外一个选项:

>> h = plot(rand(1,5),rand(1,5),'o');
>> set(h, 'MarkerSize', 100);

在此处输入图像描述

于 2013-06-22T00:03:28.660 回答
1

如果你想要比例不变的圆圈,你可以使用scatter命令。您还可以将尺寸设置得更小或更大。

scatter(X,Y,S) 以 S 指定的大小绘制每个圆。要以相同大小绘制每个圆,请将 S 指定为标量。要绘制具有特定大小的每个圆,请将 S 指定为长度等于 X 和 Y 的长度的向量。

http://www.mathworks.com/help/matlab/ref/scatter.html

于 2013-06-21T22:04:35.703 回答