【问题标题】:Using R ggridges (R-joyplot) for bar charts使用 R ggridges (R-joyplot) 制作条形图
【发布时间】:2017-12-01 14:03:46
【问题描述】:

是否可以使用ggridges 包来绘制条集而不是山脊线,类似于geom_col()

我有如下数据:

dt = tibble(
    hr = c(1,2,3,4,1,2,3,4),
    fr = c(.1,.5,.9,.1,.4,.9,.9,.4),
    gr = c('Mon','Mon','Mon','Mon','Sun','Sun','Sun','Sun')
)

下面的情节给了我:

ggplot(dt, aes(x=hr, y=gr, height=fr)) + 
  geom_ridgeline() + ylab(NULL)

如您所见,它绘制了一条连接这些值的线。我正在寻找的是单个列,如下图所示:

ggplot(dt, aes(x=hr, y=fr)) + 
  geom_col() + ylab(NULL) +
  facet_wrap(~gr)

【问题讨论】:

  • “我需要它代表 x 值之间的恒定高度。” 我不明白这是什么意思。也许你可以画出你真正想要的东西。您在寻找geom_ridgeline 的平滑版本吗?
  • 抱歉这个半生不熟的问题。我更新了问题
  • 请提供MCVE.
  • 两个cmets:1.你有没有看过stat_binline()?它有帮助吗? 2.您可以通过跟踪它们来模拟条形,左下角,左上角,右上角,右下角。这就是stat_binline() 所做的。

标签: r ggplot2 ggridges


【解决方案1】:

这是一个追踪各个条的解决方案。

library(tidyverse)
library(ggridges)

dt = tibble(
  hr = c(1,2,3,4,1,2,3,4),
  fr = c(.1,.5,.9,.1,.4,.9,.9,.4),
  gr = c('Mon','Mon','Mon','Mon','Sun','Sun','Sun','Sun')
)

# function that turns an x, y pair into the shape of a bar of given width
make_bar <- function(x, y, width = 0.9) {
  xoff <- width/2
  data.frame(x = c(x-xoff*(1+2e-8), x-xoff*(1+1e-8), x-xoff, x+xoff, x+xoff*(1+1e-8), x+xoff*(1+2e-8)),
             height = c(NA, 0, y, y, 0, NA))
}

# convert data table using make_bar function
dt %>%
  mutate(bars = map2(hr, fr, ~make_bar(.x, .y))) %>%
  unnest() -> dt_bars

ggplot(dt_bars, aes(x=x, y=gr, height=height)) + 
  geom_ridgeline() + ylab(NULL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多