【问题标题】:Creating a list of plots with map()使用 map() 创建绘图列表
【发布时间】:2020-11-01 23:17:51
【问题描述】:

我有一个函数,它接受一个数据集,过滤给定元素,并创建一个图。我想取一个向量并使用 map 过滤向量的每个元素并创建一个图。应用map(vector, function) 不起作用-我收到警告

“较长的对象长度不是较短对象长度的倍数”。

假设我有这个基于 babynames 数据集的数据框 names

names <- babynames%>%
  pivot_wider(names_from = sex, values_from = n, values_fill=0) %>%
  group_by(year,name) %>%
  summarize(Female=sum(F), Male=sum(M))  %>%
  mutate(percent = Female/(Male+Female)*100)

and a vector made up of `"Ollie"`, `"Verna"`, and `"Ava"`. I want a graph for each of `Ollie`, `Verna`, and `Ava`.

fun_name <- function(name_1) {
    names %>%
    filter(name==name_1) %>%
    ggplot(aes(x=year, y=percent)) +
    geom_line()
}

map(vector, fun_name)

我现在特别遇到的问题是所有图表都合并为一个。

【问题讨论】:

  • 请使用dput 发布您的示例数据,因为数据图片令人厌烦且不实用。

标签: r


【解决方案1】:

你可以试试:

library(tidyverse)
library(babynames)

vector <- c("Ollie", "Verna", "Ava")

fun_name <- function(name_1) {
  names %>%
    filter(name==name_1) %>%
    ggplot(aes(x=year, y=percent)) +
    geom_line()
}

plot_list <- map(vector, fun_name)
length(plot_list)
#[1] 3

各个地块位于plot_list[[1]]plot_list[[2]] 等中。

【讨论】:

  • 在这种情况下我得到了一个图表。
  • data = df 应该更改为 data = names 对于您的情况,我认为。你检查过plot_list[[1]]plot_list[[2]] 等吗?
  • plot_list[[1]] 未找到; list_plot 是一个长度为 1 的列表。data = names 是我使用的。
  • 好的..那么您能否提供一个使用dput 而不是图像来测试答案的可重现示例?我们无法从图像中复制数据。
  • 你能用 dput() 添加你自己的数据吗?我搜索并找到了this page,这并没有显示出任何我可以的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多