在ggplot中为r中的一行中的每个唯一值创建图

问题描述

我有一个这样的数据框:

library(tidyverse)

my_data <- tibble(name = c("Justin","Janet","Marisa"),x = c(100,50,75),y = c(2,3,6))

每个名字都是唯一的,我想为每个人制作一个条形图,而不必一行一行地做。我还想将每个图另存为唯一对象,因为我将使用Officer包将其输入到Power Point中。最后,名称并不总是相同的,但是每个名称​​将总是唯一的。

例如,我想要珍妮特(Janet)一幅情节,贾斯汀(Justin)一情节,玛丽莎(Marisa)一情节。我不希望它们多面,而应该作为它们自己的对象。

有什么想法吗?

解决方法

我们可以先获取长格式的数据,然后为每个name创建图。

library(tidyverse)
long_data <- my_data %>% tidyr::pivot_longer(cols = -name,names_to = 'col')

plots_list <- map(unique(my_data$name),~long_data %>%
                   filter(name == .x) %>%
                   ggplot() + aes(name,value,fill = col) + 
                   geom_bar(stat = 'identity',position = 'dodge') + 
                   scale_fill_manual(values = c('red','blue')) + 
                   ggtitle(paste0('Plot for ',.x)))

这将返回可以通过plots_list[[1]]plots_list[[2]]等访问单个图的图列表。

plots_list[[1]]

enter image description here