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

时间:2017-08-22 17:04:13

标签: r ggplot2 radians

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

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

for ( i=n; i>0; i-- )
{
    int index  = linearSearch(seq,i,n);
    int height = bricks[index];

    for ( j=0; j<n ; j++ )
    {
        if( j != index )
        {
            if( bricks[j] >= height )
            {
                count += bricks[j] - height;
                bricks[j] -= bricks[j] - height;
            }
        }
    }

    bricks[index] = 0;
    seq[index] = 0;
}

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

enter image description here

1 个答案:

答案 0 :(得分:2)

您需要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,你就可以诊断发生了什么:< / p>

enter image description here

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

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

如果您的下一个问题是:我怎样才能将其显示为半圆形,而左侧没有浪费的空间?我会先发制人地回答它更具挑战性,并将涉及预先计算直方图值并将每个条形角转换为极坐标#34;手动&#34;