绘制不相交的圆圈

18 r

我试图绘制两个不相交的触摸圆圈,但我想我错过了一些非常基本的东西......

jpeg(file="test.jpg")
diam <- sqrt (2)
plot (c(-1,1), c(1,-1), xlim=c(-5,5), ylim=c(-5,5))

symbols (c(-1,1), c(1,-1), circles=c(diam,diam), add=TRUE, inches=FALSE)
dev.off()
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么这些圆圈重叠?

替代文字

Jos*_*ich 16

通过以下方式设置宽高比asp:

diam <- sqrt (2)
plot (c(-1,1), c(1,-1), xlim=c(-3,3), ylim=c(-3,3), asp=1)
symbols (c(-1,1), c(1,-1), circles=c(diam,diam), add=TRUE, inches=FALSE)
Run Code Online (Sandbox Code Playgroud)

更新后,通过评论和聊天添加Gavin Simpson的出色见解.我的回答可能是正确的,但加文提供了非常有益的原因,为什么 asp=1工作,为什么它是不是默认的行为.非常感谢他.

默认绘图设备设置尝试显示数据,而不假设变量之间关系的比例.直接引用加文:

原因asp = 1不是默认情况下asp = 1对于不共享公共测量单位的数据没有意义,例如高度与重量.为什么1米高的变化表示为1千克的重量变化?

结果,沿x轴的距离与y轴上的距离没有关系.因此,绘制的是真实圆的变换 - 它们实际上是圆形,只是被翻译,因为您绘制它们的坐标系是不合适的.

一种说明Gavin点的方法是在默认设备(而不是jpeg设备)上绘制圆圈,然后重新调整设备的大小.你可以让圈子看起来各种怪异.

  • @OneWhoIsUnnamed:在您的示例中,绘图区域不是正方形,纵横比不是1.因此,沿x轴的距离与y轴上的距离无关.因此,绘制的是真实圆的变换 - 它们实际上是圆形,只是被翻译,因为您绘制它们的坐标系是不合适的.绘制的不是圆形,但"符号"创建的数字代表圆形. (3认同)
  • 简而言之,带有圆圈=的符号将始终为用户绘制看起来像一个完美圆圈的东西,即使它不是绘图坐标空间中的圆圈.如果你想在绘图坐标中有一个圆,那么用小步骤绘制从0到2*pi的t的r*sin(t),r*cos(t).当你拉伸情节时,这看起来不像一个圆圈!(除非asp = 1当然!) (3认同)
  • 因此,对于记录,asp = NA作为默认值的逻辑是将x和y轴缩放为最小值和最大值而不是"自然"比例.现在一切都很清楚了.请参阅https://stat.ethz.ch/pipermail/r-help/2010-August/249812.html (2认同)
  • @OneWhoIsUnnamed; 我不认为这是完全正确的; 限制是最小值和最大值加/减一个小的软糖因子(4%IIRC).这是由于参数`xaxs`和`yaxs`设置为`"r"`(常规); 见`?par`."asp = 1"的原因不是默认的是"asp = 1"对于不共享公共测量单位的数据没有意义,例如高度与重量.为什么1米高的变化表示为1千克的重量变化?因此,假设绘制的变量之间没有特殊关系,我们的想法是尽可能地显示数据. (2认同)