Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用负r在极坐标系中绘制点?_R_Ggplot2 - Fatal编程技术网

如何用负r在极坐标系中绘制点?

如何用负r在极坐标系中绘制点?,r,ggplot2,R,Ggplot2,我试着在极坐标系中画两个点(r,θ),其中r是距离中心的距离,θ是角度 当前解决方案不起作用,因为我没有轴的唯一“原点”。使用坐标平面时,y的原点是圆的中心,而x的原点似乎是每个半径的中心 我要做的是,在一个系统中绘制,下面例子中的两点相对于原点是对称的 library(ggplot2) ggplot(data.frame(r = c(-100, 100) , theta = c(1, 1)), aes(x = r, y= theta)) + geom_text(aes(lab

我试着在极坐标系中画两个点(r,θ),其中r是距离中心的距离,θ是角度

当前解决方案不起作用,因为我没有轴的唯一“原点”。使用坐标平面时,y的原点是圆的中心,而x的原点似乎是每个半径的中心

我要做的是,在一个系统中绘制,下面例子中的两点相对于原点是对称的

library(ggplot2)
ggplot(data.frame(r = c(-100, 100) , theta = c(1, 1)),
       aes(x = r, y= theta)) +
  geom_text(aes(label = paste(round(r, 1),',', round(theta, 1)))) +
  coord_polar(theta = 'y',
              direction = -1,
              start = -pi/2) +
  scale_y_continuous(limits = c(0, 2*pi),
                     breaks = c(0, pi/2, pi, 3*pi/2 ),
                     labels = c('0', 'pi/2', 'pi', '3/2pi'))

更新:

虽然
coord_polar
创建的系统可能不是一个“直接”的polar系统,但这里引用了图形语法,部分解释了
coord_polar
的行为,以及我必须修正
y
限制的原因:

我们可以将极坐标视为所有其他坐标系的例外 电子秤在这个系统中进行处理。也就是说,我们可以解释角度 值ab-以弧度表示。如果我们所有人 图形是数学或工程应用,涉及 弧度。然而,我们选择不这样做,这样我们就可以隐藏 进行坐标转换时缩放详细信息。这就够了 例如,用极坐标表示年时间很容易。在里面 极坐标转换,因此,我们将0弧度与 以数据单位(度、弧度、比例、, 等)和2S弧度的最大值。将循环参数组合在一起 通过比例函数中的最小和最大参数,我们可以创建 如果我们愿意的话,有不止一次旋转的极坐标图


我不完全理解你的最终目标是什么,但问题可能是如果你想要
r
表示到原点的距离,那么它不能是负数。ggplot2使用coord_polar()所做的只是沿着极坐标使整个笛卡尔平面变形。这将导致“零”实际上是“径向”坐标的下限。如果手动更改其限制,您可以清楚地看到:

库(ggplot2)
ggplot(data.frame(r=c(-100100),θ=c(1,1)),
aes(x=r,y=θ))+
几何图形文本(aes(标签=粘贴(圆形(r,1),',',圆形(θ,1)))+
极坐标(θ='y',
方向=-1,
开始=-pi/2)+
标度y连续(限值=c(0,2*pi),
断开=c(0,pi/2,pi,3*pi/2),
标签=c('0','pi/2','pi','3/2pi'))+
标度x连续(限值=c(-200,NA))

我不知道你说的“相对于原点对称”到底是什么意思,但这样可以吗

库(ggplot2)
ggplot(data.frame(r=c(100100),θ=c(1,1+pi)),
aes(x=r,y=θ))+
几何图形文本(aes(标签=粘贴(圆形(r,1),',',圆形(θ,1)))+
极坐标(θ='y',
方向=-1,
开始=-pi/2)+
标度y连续(限值=c(0,2*pi),
断开=c(0,pi/2,pi,3*pi/2),
标签=c('0','pi/2','pi','3/2pi'))+
标度x连续(限值=c(0,NA))


通过(v0.3.0)将Elio Campitelli的答案改编为函数,于2019年7月16日创建,您可以使用以下内容:

plot_polar_signed <- function(r, theta) {
  data2 <- data.frame(r2 = abs(r),
             theta2 = theta + ifelse(r < 0, pi, 0))
  ggplot(data2, aes(x = r2, y = theta2)) +
    geom_text(aes(label = paste(round(r, 1),',', round(theta, 1)))) +
    coord_polar(theta = 'y',
                direction = -1,
                start = -pi/2) +
    scale_y_continuous(limits = c(0, 2*pi),
                       breaks = c(0, pi/2, pi, 3*pi/2 ),
                       labels = c('0', 'pi/2', 'pi', '3/2pi'))

}

plot_polar_signed(r = c(-100, 100), theta = c(1, 1))

plot\u polar\u带有
r<0
符号的点不在极坐标中定义,因为
r
是距离中心的距离。否则,
r!=0
即使强制θ处于
(0,2pi)

所以你真的要在扩展极坐标系中作图,这里允许负的
r
,而
(r,θ)
(-r,θ+pi)
是相同的点

我建议使用从系统到规范极坐标的映射

canonical=0){
c(r=r,θ=θ%%(2*pi))
}否则{
c(r=-r,θ=(θ+pi)%%(2*pi))
}
}
或更短且矢量化:


非常感谢您的回答。第二张照片实际上就是我要找的,如果这架飞机是一个“真实的”极平面,你会得到什么。我的最终目标是在极坐标平面上画一条直线,但首先我需要弄清楚如何绘制一个点……“DaBo,如果最终结果是一条直线,考虑一般注释,例如用<代码> CooPosig/< >())只需创建一行作为第二个情节和覆盖。这可能是一种直接的黑客手段。@Tjebo不幸不是我的选择,我需要在极坐标中画线。不知何故,我没有看到你的答案,并发布了相同的--“这种方法的一个问题是我不能在极坐标中画直线,因为绘制的是负的
r
。该方程在其他软件中绘制得很好,它可以绘制出我所认为的极坐标系。这是一个到wolfram的链接,他们在那里绘制负r:你考虑过从极坐标转换到笛卡尔坐标吗,在笛卡尔坐标中用ggplot绘制直线很容易?是的,但我的意思是能够在极坐标中绘制。然而,我查了一下图形语法,它说“我们可以将极坐标视为在该系统中处理所有其他比例尺的例外。也就是说,我们可以将角度值绝对解释为弧度。如果我们所有的图形都是涉及弧度的数学或工程应用程序,这将是有意义的。然而,我们选择不这样做,这样我们可以在进行坐标转换时隐藏缩放细节”(第205页)-因此我猜极坐标系在ggplot2I中不可用。我认为这里的关键(在两个答案中使用)是将“负r”转换为“正r,
pi
围绕圆的弧度“有了它,解决办法就是调整数据,在这一点上,绘制数据本身就可以了。”@r2evan对我来说是个问题