为每个条形图添加一个标签r

时间:2018-05-17 14:07:25

标签: r ggplot2 bar-chart graphing

我正在尝试编写50名学生的测试分数的图形描述。我的最终目标是创建条形图的50种变体,每个学生一个,在轴上只有一个学生的名字,这样他/她就可以看到他们与其他学生的比较,而不会透露谁得分。在下面的照片中,我想把杰克逊"在第一个栏上,其他人留空第一个变化。第二个只有" Smith"等。此外,我想根据他们在学校的年份,变量" level"来分割数据。

SpecificDerivedType

enter image description here

2 个答案:

答案 0 :(得分:2)

我建议添加一些样本。然后学生找不到模式并得出结论。 因此,您可以尝试

library(tidyverse)
# bring the data in adequat format
# In brief, a list of the same data.frame for each student
df <- 1:nrow(grades) %>% 
     purrr::map( ~grades) %>% 
     set_names(grades$names) %>% 
     bind_rows(.id = "ID") %>% 
     nest(-ID) %>%  
# the plots using purrr::map2  
     mutate(level=map2(data,ID, ~.x %>% filter(names == .y) %>% select(level))) %>% 
     mutate(data=
           map2(data, ID, ~.x %>% 
                  mutate(n=paste0("#", sample(seq_len(n()), size = n())),
                         names=ifelse(names == .y, as.character(names), n),
                         names=factor(names, levels = c(.y, sample(n, n())))))) %>%
     mutate(plots=map2(data,level, ~ggplot(data=.x,aes(x = names, y = scores, fill = scores))+ 
               geom_col() +
               ggtitle("test scores by level-  February 2018", subtitle = .y$level)
     )) 
# and or illustration purposes the first four plots
library(cowplot)
plot_grid(df$plots[[1]], df$plots[[2]], df$plots[[3]],df$plots[[4]])

enter image description here

答案 1 :(得分:1)

需要一点理解,但我们可以让它发挥作用。 正如@richardtelford所说,我们需要手动构建标签,为此我们可以“循环”名称,按每个名称的级别过滤,构建适当的legnth矢量,最后使用这些标签构建图:

names <- c("Jackson", "Smith", "Johnson", "Richards", "Matthews", "Redmond", "Phillips")
scores <- c(.99, .65, .73, .89, .88, .92, .87)
level <- c(10,11,10,11,11,11,11)
grades <- cbind.data.frame(names, scores, level)


library(purrr)
library(dplyr)
library(ggplot2)

grades$names %>% 
  walk(~{
    filtered_grades <- grades %>% 
      filter(level == level[names == .x]) 

    labels <- array(data = '',dim = nrow(filtered_grades))
    labels[filtered_grades$names == as.character(.x)] <- as.character(.x)

    p <- filtered_grades %>% 
      ggplot() +
      geom_col(aes(names, scores, fill = scores)) +
      scale_x_discrete(labels = labels)
      print(p)
  }) 

reprex package(v0.2.0)创建于2018-05-17。