ggplot,条形图 - 用2个变量计算比例

时间:2017-12-07 16:10:16

标签: r ggplot2 bar-chart

假设我有以下数据。我想创建一个条形图,它显示冬天说“1”的比例,“春天”的比例为1,然后是冬季的“2”和春季的“2”。 data example

所以:

x%在冬天说1 x%在春天说1

x%在冬天说2 x%在春天说了2

我到目前为止的图表是chart example

这个问题是我不希望所有的条加起来都是100.我希望红色(弹簧条)加到100%,绿色(冬天)条加到100。 / p>

因此,冬季和春季的比例不是基于冬季和春季的比例,而是应该单独计算冬季和春季的比例,但是出现在同一张图表上。

到目前为止,这是我的代码:

ggplot(data = a, aes(x = Answer, y = (..count..)/sum(..count..))) + 
geom_bar(aes(fill = season), position = "dodge") +
theme_minimal() + 
scale_y_continuous(labels=scales::percent,limits= c(0, 1))+
labs (x="%")

问题是:

两个绿色条应增加到100% 两个红色条应该加起来为100%

提前致谢!

1 个答案:

答案 0 :(得分:1)

我的方法是直接在data.frame中计算频率,然后绘制:

### example data
a <- data.frame(
  Answer = c(1,2,2,1,1,2,1,2,1,2,2,2,1),
  season = c("Winter", "Spring", "Spring", "Winter", "Spring", "Winter", 
          "Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Winter")
)

library(tidyverse)

a <- a %>% group_by(season, Answer) %>%
  summarise(n = n()) %>%
  mutate(freq = n/sum(n))

ggplot(data = a, aes(x = Answer, y = freq)) + 
  geom_bar(aes(fill = season),stat = "identity", position = "dodge") +
  theme_minimal() + 
  scale_y_continuous(labels=scales::percent,limits= c(0, 1))+
  labs (y="%")

enter image description here