这是我的数据框
df <- tibble("Fruit_Name" = c("Banana", "Apple", "Orange", "Peach", "Pear", "Watermelon"), "Code" = c(1,1,2, 2,3, 3), "Share_2002" = c(0.116, 3.442, 2.445, 1.932, 0.985, 0.321), "Share_2010" = c(1.4, 2.8, 2.4, 2.10, 0.99, 1.04), "Share_2018" = c(0.161, 0.232, 1.234, 0.456, 0.089, 0.06), "Share_2018_bis" = c(0.5, 0.34, 1.5, 1.2, 0.75, 1.8))
从这个初始数据帧中,我构建了一个嵌套列表:
fruits <- df %>%
rename("2002" = Share_2002,
"2010" = Share_2010,
"2018" = Share_2018,
"2018bis" = Share_2018_bis) %>%
arrange(Code)%>%
group_split(Code) %>%
map(~list(fruit_normal = .x, fruit_long = .x %>%
gather(Year, Share, c(3,4,5), -Code, -Fruit_Name) %>%
arrange(Fruit_Name) %>%
mutate_all(funs(str_replace(., "2018bis", "2018"))),
fruits2 = .x %>%
gather(Year, Share, c(3,4,6), -Code, -Fruit_Name) %>%
arrange(Fruit_Name) %>%
mutate_all(funs(str_replace(., "2018bis", "2018")))))
我想像这样或多或少有一个图
ggplot(x, aes(x = Year, y = Share, color = Fruit_Name)) +
geom_line(size = 2) +
facet_grid(Fruit_Name~ .)
这使我可以为每个代码组中的每个水果创建一个图,其中x轴为Year,y轴为Share。
我很难为ggplot指定每个嵌套的数据帧! 我不想从列表中构造一个数据框,但是尝试访问现有的数据框。
我尝试过这样的事情:
myplot <- function(x){ggplot(x, aes(x = Year, y = Share, color = Fruit_Name)) +
geom_line(size = 2) +
facet_grid(Code~ .)}
i <- c(1,2,3)
for (x in i){
lapply(fruits[["i"]], map_depth(x, 2, myplot(fruits2)))
}
但是它不起作用,因为在任何情况下,ggplot都需要一个数据框作为参数而不是列表!!
谢谢
答案 0 :(得分:1)
我认为您的示例数据中有一个错字,因为您没有像其他人一样重命名Share_2010,所以我从
开始fruits <- df %>%
rename("2002" = Share_2002,
"2010" = Share_2010,
"2018" = Share_2018,
"2018bis" = Share_2018_bis) %>%
arrange(Code)%>%
group_split(Code) %>%
map(~list(fruit_normal = .x, fruit_long = .x %>%
gather(Year, Share, c(3,4,5), -Code, -Fruit_Name) %>%
arrange(Fruit_Name) %>%
mutate_all(funs(str_replace(., "2018bis", "2018"))),
fruits2 = .x %>%
gather(Year, Share, c(3,4,6), -Code, -Fruit_Name) %>%
arrange(Fruit_Name) %>%
mutate_all(funs(str_replace(., "2018bis", "2018")))))
然后在绘图代码中添加分组美感并使其具有功能
plotFruit <- function(df) {
ggplot(df, aes(group = Fruit_Name, x = Year, y = Share, color = Fruit_Name)) +
geom_line(size = 2) +
facet_grid(Fruit_Name~ .)}
并使用
解压缩此庞大的数据结构map(fruits, pluck, "fruit_long") %>% map(plotFruit)
和
map(fruits, pluck, "fruits2") %>% map(plotFruit)
这是您要找的吗?