Перебрать группы и создать график для каждой r

Я пытаюсь отобразить / зациклить столбец видов в наборе данных Iris, чтобы создать график для каждого вида. Приведенный ниже сценарий возвращает три диаграммы, но все они содержат одни и те же данные и не разделены по видам. Кажется, что функция карты игнорирует список видов и просто просматривает весь фрейм данных. Пробовал разные подходы, но не смог заставить работать. Любая помощь очень ценится

Ваше здоровье

library(ggplot2) 
library(purrr) 

species_list = unique(Iris$Species)

species_plot = function(x,y) {

     ggplot(data = Iris,colour = Species, aes_string(x=x,y=y)) + 
     geom_point(shape = 21, aes(fill = Species),colour = "black", size =8)

 }


species_bins = map(species_list, ~species_plot("sepal_length", "sepal_width") )

Думаю, вы имели в виду iris

akrun 13.09.2018 17:48

Почему бы просто не использовать фасетирование?

James 13.09.2018 17:50

Я хочу экспортировать каждый график в двоичный файл, который я могу отобразить в Spotfire на карте с помощью функции lable

berwyn72 13.09.2018 17:55
1
3
1 410
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Мы можем изменить функцию, включив в нее «список_видов».

species_list <- unique(iris$Species)
species_plot <- function(x,y, z) {

  ggplot(data = iris, aes_string(x=x,y=y, colour = z)) + 
     geom_point(shape = 21, aes_string(fill = z),
               colour = "black", size =8)

  }

map(species_list, ~species_plot("Sepal.Length", "Sepal.Width", .x) )

Привет, большое спасибо за ответ, и ваше время, но я все еще не могу получить то, что мне нужно. Код дает мне три диаграммы, но со всеми видами, нанесенными на каждую, после достижения я получаю отдельный график для каждого вида.

berwyn72 13.09.2018 18:09

berwyn72: Я думаю, вы ошибаетесь, потому что ответ @akrun предоставляет 3 отдельных графика с одним видом на график

hackR 13.09.2018 18:47
Ответ принят как подходящий

Попробуй это:

# Load packages
library(tidyverse)
library(rlang)

# Define the function
species_plot <- function(x, y, pal = c('#2678B2', '#FD7F28', '#339F34')) {

    # Set variables to plot using the black magic of rlang
    x_var <- enquo(x)
    y_var <- enquo(y)

    # Generate plots
    iris_plots <- iris %>% 
        # Group and nest data by Species 
        # Creates a dataframe with two columns: 'Species' and 'data' (a list-column)
        group_by(Species) %>% 
        nest() %>% 
        # Add a new column with the ggplot objects
        mutate(plots = pmap(.l = list(data, pal, as.character(Species)), 
                            ~ ggplot(data = ..1) + # first element of .l
                                aes(x = !!x_var, # expose the x and y variables
                                    y = !!y_var) +
                                geom_point(shape = 21,
                                           size = 8,
                                           fill = ..2, # second element of .l
                                           colour = '#000000') +
                                labs(title = str_to_title(str_glue('{..3}'))) + # third element of .l
                                theme_bw() +
                                theme(legend.position = 'none')))

    # Walk through the plots column, printing each ggplot object
    walk(.x = iris_plots$plots,
         ~ print(.x))
}

# Test the function
species_plot(x = Sepal.Length, y = Sepal.Width)

Создано 13.09.2018 пользователем пакет REPEX (v0.2.0).

Другие вопросы по теме