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

标签 r ggplot2 radians

我有一组范围在 pi/2 和 -pi/2 之间的值。我想使用直方图几何和极坐标图来绘制它们,因此在极坐标的顶部有 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 轴的收缩似乎有些有趣:

enter image description here

最佳答案

您需要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_pold参数的情况下运行此命令,您可以诊断发生了什么情况:

enter image description here

默认的 30 个分箱在数据的上边缘留下了一个观测值非常少的分箱。通过强制 bin 具有一定的宽度并选择 0 是中心还是边缘,您可以强制 bin 与数据范围整齐地对齐。

enter image description here

然后,当您将其转换为极坐标时,我认为它看起来像您想要的那样:

enter image description here


更新为将比例更改为相等弧度

要使 -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,因此您必须告诉它显示所有非数据空间。

enter image description here

enter image description here

如果您的下一个问题是:如何将其显示为半圆,而不浪费左侧空间?我会先发制人地回答,这更具挑战性,并且需要预先计算直方图值并将每个条形的角“手动”转换为极坐标。

关于r - ggplot coord_polar() 在 pi/2 和 -pi/2 之间绘制顶部和底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45823350/

相关文章:

在C中计算弧度的正弦

javascript - 找不到 Angular 对象以弧度为单位移动

R 中的递归编程

sql - 通过 R sqlSave 更新 SQL 表

r - 'closure' 类型的 ggplot2 条形图对象不可子集化

r - 使用 ggplot2 绘制圆形密度图

r - 名称对应于现有函数名称的函数参数的默认值

将数据从三列 reshape 为两列

r - 具有position_stack的抖动文本/标签

java - 物体不会根据给定的角度移动?