r - 显示方位和距离的圆图

标签 r ggplot2 plot

我试图显示个人离开站点的方位和 1 天内行进的距离,以及在不同方位行驶的人数。

目前,我可以在 ggplot2 中制作这些基本图:

# distance & bearing
ggplot(data=df,
       aes(bear, dist)) +
  geom_point() +
  scale_y_log10()

# no. individuals & bearing
ggplot(data=df.postDepDT,
       aes(bear)) +
  geom_histogram(bins = 36)

#my data looks like the following
bear <- c(-172, -175, -160, -155, -150, -10, 23, 87, 122, 179)
dist <- c(5, 101, 326, 47, 23, 55, 6, 7, 44, 162)
df <- data.frame(bear, dist)

我希望我的最终情节有两个面板。第一个是一个圆,具有不同长度(指示距离)的点,沿轴承方向从圆向外辐射。这些点将沿着轴承连接到圆。第二个是围绕圆的直方图,显示沿每个方位远离圆的个体数量。

在这些图中,0o(或北)在顶部 -180o/180o(南)在底部,-90o 和 90o(西和东)分别在左侧和右侧。

更新:

将 coord_polar() 添加到图形有助于制作圆形图形,但是,我仍然无法在图形顶部获得 0o 值(对于北)(start=0 将 0o 值放在底部)。另外,我仍在寻找将第一个图中的点连接到中心点的解决方案。

最佳答案

你在寻找这样的东西吗?

illustration

ggplot(data=df,
       aes(bear, dist)) +
  geom_segment(aes(xend = bear, yend = 0.1)) +
  geom_point() +
  scale_x_continuous(limits = c(-180, 180),
                     breaks =  seq(-180, 180, 90)) +
  # scale_y_log10() +
  coord_polar(start = pi) +
  theme_bw()

说明 :
  • geom_segment()期待 x 的美学, y , xend , & yend . “pre- coord_polar”版本的带有从中心辐射的线条的圆形图表应该是笛卡尔坐标系中的图表,线条垂直下降以与 x 轴相交,因此我们希望每个 xend值与 x 相同值,每个 yend值尽可能小(距离为 0,但由于您对 y 轴的对数刻度感兴趣,我添加了一个小的正值):

  • cartesian form
    ggplot(data=df,
           aes(bear, dist)) +
      geom_segment(aes(xend = bear, yend = 0.1)) +
      geom_point() +
      scale_x_continuous(limits = c(-180, 180),
                         breaks =  seq(-180, 180, 90)) +
      # scale_y_log10() +
      # coord_polar(start = pi) +
      theme_bw()
    
  • coord_polar()对其 start 的期望如下参数(强调):

  • offset of starting point from 12 o'clock in radians



    由于您的轴承的实际值在 c(-175, 179) 中范围,我希望你的规模是 c(-180, 180) .默认start = 0将因此放置 -180/180在 12 点钟位置。放置0在 12 点钟位置,设置 start = pi ,这是 180 度的弧度。
  • 最后,我敦促您思考为什么要使用对数刻度来表示距离。在技​​术层面上,为 yend 选择一个任意小的正值可能导致同一点看起来与中心的距离不同。 (一些 yend 值请参见下图)在更理论的层面上,我认为对数刻度在我们比较大范围的数量时是合适的,而这里的情况并非如此。

  • illustrations with different yend values
    p <- ggplot(data=df,
           aes(bear, dist)) +
      geom_point() +
      scale_x_continuous(limits = c(-180, 180),
                         breaks =  seq(-180, 180, 90)) +
      scale_y_log10() +
      coord_polar(start = pi) +
      theme_bw()
    
    gridExtra::grid.arrange(
      p + geom_segment(aes(xend = bear, yend = 1)) + ggtitle("yend = 1"),
      p + geom_segment(aes(xend = bear, yend = 0.1)) + ggtitle("yend = 0.1"),
      p + geom_segment(aes(xend = bear, yend = 0.01)) + ggtitle("yend = 0.01"),
      p + geom_segment(aes(xend = bear, yend = 0.001)) + ggtitle("yend = 0.001"),
      nrow = 2
    )
    

    关于r - 显示方位和距离的圆图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132850/

    相关文章:

    r - 将标记数字变量的变量标签转换为新的字符变量

    从 ggplotly() 箱线图中删除异常值

    jquery - 使用 jQuery Flot 绘制外部数据

    r - 将 stat_compare_means 与 r : calculates p value only for 1 facet 中的构面结合起来

    r - 将第三个变量添加到 stat_density_2d 图

    python - 使用默认颜色图绘制数据帧的列,但一列使用不同的颜色

    python - 改变情节的起源

    r - 如果R中数据帧为空,如何编写if/else语句

    r - 匹配特定列中的前一行并在 R 中执行计算

    r - 使用 R 进行高精度求和,涉及二项式系数和对数