使用r创建堆叠条形图

3npbholx  于 2023-01-10  发布在  其他
关注(0)|答案(3)|浏览(158)

我想创建一个堆叠条形图,其中所有的酒吧堆叠成一个百分比。但我只能创建一个正常的条形图。寻求您的帮助。

df$pecent <- paste0(round(100* group1$count/sum(group1$count)), "%")

ggplot(group1, aes(fuel_type, y= pecent, fill=pecent)) + geom_bar(postion= position_stack(), stat="identity", show.legend = FALSE)

描述文件:

输出:

多谢了

vh0rcniy

vh0rcniy1#

这就是我处理mtcars数据的方法。

library(tidyverse)
mtcars %>%
  mutate(gear= as.factor(gear)) %>%
  group_by(gear) %>%
  tally() %>%
  ungroup %>%
  mutate(perc= n/sum(n),
         id="1") %>%
  ggplot(aes(x=id, y=perc, fill=gear))+
  geom_col(position = "stack")+
  scale_y_continuous(labels= scales::percent)

创建于2023年1月6日,使用reprex v2.0.2

waxmsbnn

waxmsbnn2#

可以将x = ""position = "fill"一起使用,将所有值堆叠到一个条形图中。要获得百分比轴,可以将scale_x_continuous与百分比标签一起使用。可以使用以下代码:

library(ggplot2)
ggplot(group1, aes(x = "", y= count, fill=fuel_type)) + 
  geom_bar(position="fill", stat="identity") +
  scale_y_continuous(labels= scales::percent)

创建于2023年1月6日,使用reprex v2.0.2
数据:

group1 <- data.frame(fuel_type = c("DIESEL", "LPG", "PETROL", "PETROL/ELECTRIC"),
                 count = c(9,14,704,3),
                 pecent = c("1%", "2%", "96%", "0%"))
lh80um4z

lh80um4z3#

请尝试使用str_extract来提取列pecent中的数值并将其转换为数字:

library(stringr)
ggplot(group1, aes(x = "", 
                   y = as.numeric(str_extract(pecent, "\\d+")),
                   fill = fuel_type))+ 
  geom_bar(position = "stack", stat = "identity")+
  labs(y = "%", x = "")

数据(感谢@Quinten):

group1 <- data.frame(fuel_type = c("DIESEL", "LPG", "PETROL", "PETROL/ELECTRIC"),
                 count = c(9,14,704,3),
                 pecent = c("1%", "2%", "96%", "0%"))

相关问题