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

ggplot coord_polar()在顶部和底部的pi/2和-pi/2之间绘制,r,ggplot2,radians,R,Ggplot2,Radians,我有一组介于pi/2和-pi/2之间的值。我想用柱状图geom和极坐标图来绘制它们,所以在极坐标的顶部有pi/2,在底部有-pi/2 我正在使用的数据文件: 下图左侧x轴的挤压似乎有点滑稽: 您需要连续缩放(expand=c(0,0))ggplot自动在所有刻度的每一端填充一点,因此在绘图周围有一个漂亮的边框,但在极坐标系中,您通常希望它没有间隙 更新了其他步骤以整理外观: 如果运行此时不使用geom_histogram和的参数,而不使用coord_polar,则可以诊断发生了什么: 默认的

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

我正在使用的数据文件:

下图左侧x轴的挤压似乎有点滑稽:


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


更新了其他步骤以整理外观: 如果运行此时不使用
geom_histogram
的参数,而不使用
coord_polar
,则可以诊断发生了什么:

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

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


更新以将比例更改为等弧度 要使-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,因此必须告诉它显示所有非数据空间


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

当我添加
scale\u x\u continuous(expand=c(0,0))
时,我会得到相同的输出。我试着弄乱了
scale\u x\u continuous()
和它的参数,但我弄不好。@HLudwig,检查我的编辑。首先查看笛卡尔坐标系下的极坐标图,以便能够诊断问题,这总是很好的。嗨,布莱恩!哇,谢谢你。我希望数据只显示在绘图的右半球。因为数据表示从pi/2到-pi/2的弧度。换句话说,数据值显示90度到-90度之间的角度。那么,装箱问题是由于pi/2和-pi/2的值相同造成的吗?只是忘记了ping@Brian@HLudwig像那样?
  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)
  ... +
  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))) + ...