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