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
,但这需要创建xmin
、xmax
、ymin
和ymax
。因此,原始数据框需要额外的工作。
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()
我有以下数据:
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
.
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
,但这需要创建xmin
、xmax
、ymin
和ymax
。因此,原始数据框需要额外的工作。
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()