【问题标题】:how to transfer the following dateset to longformat and make the bar plot如何将以下数据集转换为长格式并制作条形图
【发布时间】:2021-04-08 23:36:10
【问题描述】:

我得到的数据集如下

year<-seq(2000, 2010,2)
erate1<-runif(6,0,1)/6
erate2<-runif(6,0,1)/6
erate3<-runif(6,0,1)/6
erate4<-runif(6,0,1)/6
barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)

女性职位将是2000年、2002年、2004年......

星期五的位置将是erate1,erate2,

【问题讨论】:

    标签: r ggplot2 ggplotly


    【解决方案1】:

    在 StackOverflow 上,建议您提供自己的尝试来解决您的问题。不过看你之前的问题,我可以看到你通常会这样做,而且这个问题很清楚,所以这里是一个答案:

    library(tidyverse)
    year<-seq(2000, 2010,2)
    erate1<-runif(6,0,1)/6
    erate2<-runif(6,0,1)/6
    erate3<-runif(6,0,1)/6
    erate4<-runif(6,0,1)/6
    barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)
    
    barplotdf %>% 
      pivot_longer(cols = -c(year)) %>% 
      mutate(sex = ifelse(year %in% c(2000, 2002, 2004), "Female", "Male"),
             day = case_when(name == "erate1" ~ "Fri",
                             name == "erate2" ~ "Sat",
                             name == "erate3" ~ "Sun",
                             name == "erate4" ~ "Thur")) %>% 
      ggplot(aes(x = day, y = value, fill = day)) +
      geom_col() +
      facet_wrap("sex") +
      scale_y_continuous(labels = scales::percent_format(),
                         name = "Percent") +
      scale_fill_discrete(label = c(1, 2, 3, 4))
    

    编辑

    要添加百分比,您需要“格式化”数据框(旋转更长的时间,添加基于年份的“sex”变量,并将“erate*”更改为“day”),然后在第二步中创建标签:

    # Load libraries
    library(tidyverse)
    
    # Create the dataframe
    year<-seq(2000, 2010,2)
    erate1<-runif(6,0,1)/6
    erate2<-runif(6,0,1)/6
    erate3<-runif(6,0,1)/6
    erate4<-runif(6,0,1)/6
    barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)
    
    # 'First step': format the dataframe to 'feed into' ggplot
    formatted_barplotdf <- barplotdf %>% 
      pivot_longer(cols = -c(year)) %>%
      mutate(sex = ifelse(year %in% c(2000, 2002, 2004), "Female", "Male"),
             day = case_when(name == "erate1" ~ "Fri",
                             name == "erate2" ~ "Sat",
                             name == "erate3" ~ "Sun",
                             name == "erate4" ~ "Thur"))
    
    # 'Second step': create a new variable called "perc"
    labels_df <- formatted_barplotdf %>% 
      group_by(sex, day) %>% 
      summarise(perc = round(sum(value), 4))
    
    # Plot the dataframe
    ggplot(formatted_barplotdf, aes(x = day, fill = day, y = value)) +
      geom_col() +
      facet_wrap("sex") +
      scale_y_continuous(labels = scales::percent_format(),
                         name = "Percent") +
      scale_fill_discrete(label = c(1, 2, 3, 4)) +
    # Add the labels from "labels_df"
      geom_text(data = labels_df, aes(y = perc,
                                     label = paste(perc * 100, "%", sep = ""),
                                     vjust = -0.5))
    

    【讨论】:

    • 我知道将百分比添加到图表中类似于:geom_text(aes( label = scales::percent(..prop..), y= ..prop.. ), stat= " count", vjust = -.5)+ 但是,当我将此添加到您的代码中时。它显示所有百分比都是 100%。你能教我如何解决这个问题吗?非常感谢
    • 有几种方法可以在图中添加百分比标签;我已经编辑了我的答案以显示一种方法。
    猜你喜欢
    • 2022-11-23
    • 2021-03-30
    • 1970-01-01
    • 2021-09-22
    • 2020-09-18
    • 2018-12-13
    • 1970-01-01
    • 2021-05-23
    • 2021-12-18
    相关资源
    最近更新 更多