【问题标题】:Circular histogram in ggplot2 with even spacing of bars and no extra linesggplot2中的圆形直方图,条形间距均匀,没有多余的线条
【发布时间】:2017-03-26 19:41:17
【问题描述】:

我正在 ggplot2 中制作一个圆形直方图,显示调用次数在 24 小时内的变化情况。我的数据集从 0 开始到 23,每小时调用次数:

df = data.frame(xvar = 0:23, 
                y = c(468,520,459,256,397,241,117,120,45,100,231,398,340,276,151,134,157,203,308,493,537,462,448,383))

我正在使用以下代码来创建圆形直方图:

ggplot(df, aes(xvar, y)) +
    coord_polar(theta = "x", start = -.13, direction = 1) +
    geom_bar(stat = "identity", fill = "maroon4", width = .9) +
    geom_hline(yintercept = seq(0, 500, by = 100), color = "grey80", size = 0.3) +
    scale_x_continuous(breaks = seq(0, 24), labels = seq(0, 24)) +
    xlab("Hour") +
    ylab("Number of Calls") +
    ggtitle("Number of Calls per Hour") +
    theme_bw()

我真的很喜欢由此产生的情节:

但我不知道如何在 23 和 0 条之间获得与其他条相同的间距。现在,这两个条彼此齐平,到目前为止我尝试过的任何东西都无法将它们分开。我也有兴趣删除不同时间之间的界限(例如 21 和 22 之间的界限),因为它有点分散注意力并且不传达任何信息。任何建议都将不胜感激,尤其是关于 23 和 0 条的间距!

【问题讨论】:

  • 谢谢@alistaire 我现在意识到这是不必要的。但改变这一点并没有改变情节。还有其他建议吗?

标签: r ggplot2


【解决方案1】:

您可以使用scale_x_continuousexpand参数进行调整。简单一点,

ggplot(df, aes(x = xvar, y = y)) +
    coord_polar(theta = "x", start = -.13) +
    geom_bar(stat = "identity", fill = "maroon4", width = .9) +
    geom_hline(yintercept = seq(0, 500, by = 100), color = "grey80", size = 0.3) +
    scale_x_continuous(breaks = 0:24, expand = c(.002,0)) +
    labs(x = "Hour", y = "Number of Calls", title = "Number of Calls per Hour") +
    theme_bw()

【讨论】:

  • 很棒的@alistaire,谢谢!不过,作为后续行动,现在有没有办法删除数字之间的线条?由于使用 expand 会产生间隙,但不会在 23 和 0 之间添加中间线。我认为无论如何删除那些不必要的线会更好。
  • 当然,继续+ theme(panel.grid.minor = element_blank())
  • 非常感谢@alistaire 这正是我所需要的
猜你喜欢
  • 2012-07-05
  • 1970-01-01
  • 2017-10-24
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多