【发布时间】:2019-07-15 01:45:21
【问题描述】:
我正在尝试在极坐标 (r, theta) 中绘制两个点,其中 r 是距中心的距离,而 theta 是角度。
当前的解决方案不起作用,因为我没有唯一的轴“原点”。使用coord_plane时,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 创建的系统可能不是“直的”极坐标系统,但这里引用了图形语法的一段话,部分解释了 coord_polar 的行为,以及我必须这样做的原因修复y的限制:
我们可以将极坐标视为所有其他方式的例外 在这个系统中处理秤。也就是说,我们可以解释 angular 值绝对为弧度。如果我们所有的 图形是数学或工程应用,涉及 弧度。然而,我们选择不这样做,以便我们可以隐藏 进行坐标转换时的缩放细节。这使它 例如,用极坐标表示一年的时间很容易。在 极坐标转换,因此,我们将 0 弧度与 以数据单位(度、弧度、比例、 等)和最大的2S弧度。循环参数,一起 在 scale 函数中使用 min 和 max 参数允许我们创建 如果我们愿意,可以使用不止一次旋转的极坐标图。
【问题讨论】:
-
我认为这里的关键(并用于两个答案)是将 "negative r" 转换为 "positive r,
pi弧度周围圆”。有了这个,解决方案是调整数据,在这一点上绘制它会自行解决。 -
@r2evans 我的问题是该解决方案如何“扩展到”其他操作。例如,在极坐标中绘制直线方程。
-
我理解您的担忧,我认为这就是它的外观和行为方式,所以我认为它是正确的。从概念上讲,“1 at 45deg”和“-1 at 225deg”之间的区别是什么?他们不是(手工)绘制到极坐标图上的同一个地方吗?
-
@r2evans 我不确定我是否明白你的意思,但关于“正确性”:我在对 antoine-sac 的回复的评论中引用了来自图形语法的一段话,它解释了默认行为,即诚然,在数学意义上不是“正确的”,但作者为这种约定提供了充分的理由。对我来说,一个副作用是我在极坐标中有一个直线方程,并且该方程的绘制不正确(并且“不正确”是指不在正常的极坐标系中)。
-
@r2evans 这正是我所做的,推导出在极坐标中看起来像直线的方程,它不适用于
coord_polar,因为那不是极坐标系。对于您的另一点:geom_line看起来像coord_polar中的弧线对我来说完全有意义。但是,我认为我实际上发现了与geom_area呈现方式的语法不一致:即使在极坐标中,几何图形也应保持轮廓线笔直。