ggplot coord_polar() 在顶部和底部的 pi/2 和 -pi/2 之间绘图

ggplot coord_polar() plotting between pi/2 and -pi/2 at top and bottom

我有一组介于 pi/2 和 -pi/2 之间的值。我想用直方图 geom 和极坐标图绘制它们,所以在极坐标的顶部有 pi/2,在底部有 -pi/2。

我正在使用的数据文件:https://www.dropbox.com/s/i9npm6whxi9ok5d/ellipse_df.csv?dl=0

ggplot(ellipse_df) +
  geom_histogram(aes(theta)) +
  coord_polar(start = pi/2, direction = -1)

下图左侧的 x 轴收缩似乎有些有趣:

你需要 scale_x_continuous(expand = c(0,0))ggplot 自动在所有刻度的每一端填充一点,因此绘图周围有一个漂亮的边框,但在极坐标中,您通常希望它没有间隙地环绕。


更新了额外的步骤来整理外观:

  ggplot(ellipse_df, aes(theta/(pi))) + 
  geom_histogram(binwidth = .05, colour = "white", boundary = 0) +
  scale_x_continuous(expand = c(0,0), breaks = -2:2/4, 
                     labels = c(expression(frac(-pi, 2)), 
                                expression(frac(-pi, 4)), 
                                "0", 
                                expression(frac(+pi, 4)), 
                                expression(frac(+pi, 2)))) +
  coord_polar(start = pi/2, direction = -1)

如果你 运行 这个 没有 geom_histogram 没有 coord_polar 的参数,您可以诊断发生了什么:

默认的 30 个 bin 在数据的上边缘留下一个,观察值很少。通过强制 bin 具有一定的宽度并选择 0 是中心还是边缘,您可以强制 bin 与数据范围整齐排列。

然后当你把它转换成极坐标时,它看起来像你想要的,我假设:


已更新以将比例更改为相等的弧度

要使 -pi/2 到 pi/2 成为圆的右半部分,您需要将 x 限制扩大很多:

  ... +
  scale_x_continuous(expand = c(0,0), 
                     breaks = c(-4, -2:2, 4)/4, 
                     limits = c(-1, 1),           # this is the important change
                     labels = c(expression(-pi),
                                expression(frac(-pi, 2)), 
                                expression(frac(-pi, 4)), "0", 
                                expression(frac(+pi, 4)),
                                expression(frac(+pi, 2)),
                                expression(+pi))) + ...

由于(按 pi 缩放后),您的数据从 -1/2 变为 1/2,但您希望图形显示 -1 至 1,您必须告诉它显示所有 non-data space.

如果您的下一个问题是:我怎样才能将它显示为一个半圆,而不在左侧浪费 space?我会先发制人地回答说它更具挑战性,并且涉及预先计算直方图值并将每个条形图的角转换为极坐标 "by hand".