如何在R / ggplot2

时间:2018-03-16 13:30:35

标签: r ggplot2

已经提出类似的问题,但我无法成功应用建议的解决方案。

我创建了一个这样的情节;

> elective_ga <- c(68, 51, 29, 10, 5)
> elective_epidural <- c(29, 42, 19, 3, 1)
> elective_cse <- c(0, 0, 0, 20, 7)
> elective_spinal <- c(3, 7, 52, 67, 87)
> years <- c('1982', '1987', '1992', '1997', '2002')
> values <- c(elective_ga, elective_epidural, elective_cse, elective_spinal)
> elective_technique <- data.frame(years, values)
> p <- ggplot(elective_technique, aes(years, values))
> p +geom_bar(stat='identity', aes(fill=c(rep('GA', 5), rep('Epidural', 5), rep('CSE', 5), rep('Spinal', 5)))) +labs(x='Year', y='Percent', fill='Type')

产生以下图表;

enter image description here

我期待这些酒吧按顺序(从上到下)堆叠GA,硬膜外,CSE,脊柱。我会想到我构建数据框的方式,他们应该以这种方式订购,但显然我没有。任何人都可以解释为什么这些酒吧按他们的方式排序,以及如何以我想要的方式获得它们?

2 个答案:

答案 0 :(得分:2)

这个怎么样?

elective_ga <- c(68, 51, 29, 10, 5)
elective_epidural <- c(29, 42, 19, 3, 1)
elective_cse <- c(0, 0, 0, 20, 7)
elective_spinal <- c(3, 7, 52, 67, 87)
years <- c('1982', '1987', '1992', '1997', '2002')
values <- c(elective_ga, elective_epidural, elective_cse, elective_spinal)
Type=c(rep('GA', 5), rep('Epidural', 5), rep('CSE', 5), rep('Spinal', 5))
elective_technique <- data.frame(years, values,Type)
elective_technique$Type=factor(elective_technique$Type,levels=c("GA","Epidural","CSE","Spinal"))
p <- ggplot(elective_technique, aes(years, values,fill=Type))+geom_bar(stat='identity') +
  labs(x='Year', y='Percent', fill='Type')

enter image description here

答案 1 :(得分:1)

一种方法是重新排序因子的水平。

library(ggplot2)

elective_ga <- c(68, 51, 29, 10, 5)
elective_epidural <- c(29, 42, 19, 3, 1)
elective_cse <- c(0, 0, 0, 20, 7)
elective_spinal <- c(3, 7, 52, 67, 87)
years <- c('1982', '1987', '1992', '1997', '2002')
values <- c(elective_ga, elective_epidural, elective_cse, elective_spinal)
type = c(rep('GA', 5), rep('Epidural', 5), rep('CSE', 5), rep('Spinal', 5))
elective_technique <- data.frame(years, values, type)

# reorder levels in factor
elective_technique$type <- factor(elective_technique$type,
                                  levels = c("GA", "Epidural", "CSE", "Spinal"))

p <- ggplot(elective_technique, aes(years, values))
p +
  geom_bar(stat='identity', aes(fill = type)) +
  labs(x = 'Year', y = 'Percent', fill = 'Type')

enter image description here

forcats包可以提供更清洁的解决方案。