geom_bar() 绘制线条而不是条形图

geom_bar() draws lines instead of bars

我有以下数据:

d <- data.frame(id = rep(2,6), type = c(letters[1:6]), abund = c(27.3,2.7,2.3,2.1,1.2,0.3)) 

  id type abund
1  2    a  27.3
2  2    b   2.7
3  2    c   2.3
4  2    d   2.1
5  2    e   1.2
6  2    f   0.3

我想ggplot中创建一个堆叠条形图,但是当我尝试时它无法正常工作:

 library(ggplot2)

 ggplot(data = d, aes(x = abund, y = factor(id), fill = factor(type))) +
    theme_bw() + geom_bar(stat='identity')

我得到的(左)和[概念上*]我想要的(右):

我试过改变美学并尝试各种因素,但没有任何效果。 经过广泛搜索后似乎与我的最相似,但我的问题却不同。

我该怎么办??


*我说的是概念上的,因为我是用ms paint画的。我希望它看起来像典型的 ggplot 堆叠条形图。

注意:我实际想要的最终结果是为多个 id 组堆叠条形图(即,所以我有 id = rep(2:6, each = 6) 使用我的示例)

也许这就是您要找的。我们可以使用 coord_flip.

翻转 x 轴和 y 轴
d <- data.frame(id = rep(2,6), type = c(letters[1:6]), abund = c(27.3,2.7,2.3,2.1,1.2,0.3),
                stringsAsFactors = FALSE) 

library(ggplot2)

ggplot(data = d, aes(x = factor(id), y = abund, fill = factor(type))) +
  # geom_bar(stat='identity') will also work
  geom_col() +
  # Flip the x and y axis
  coord_flip() +
  theme_bw() 

另一个想法是使用geom_rect,但这需要创建xminxmaxyminymax。因此,原始数据框需要额外的工作。

library(dplyr)

d2 <- d %>% 
  mutate(ymin = 0) %>%
  mutate(xmin = lead(abund), xmin = ifelse(is.na(xmin), 0, xmin)) 

ggplot(data = d2, aes(xmin = xmin, xmax = abund, ymin = ymin, ymax = id, 
                      fill = factor(type))) +
  geom_rect() +
  theme_bw()