如何用负r在极坐标系中绘制点?
我试着在极坐标系中画两个点(r,θ),其中r是距离中心的距离,θ是角度 当前解决方案不起作用,因为我没有轴的唯一“原点”。使用坐标平面时,y的原点是圆的中心,而x的原点似乎是每个半径的中心 我要做的是,在一个系统中绘制,下面例子中的两点相对于原点是对称的如何用负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
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对我来说是个问题