0

I have a melted data frame relating to 22 cities and for each city there are 5 size bands. The variable column relates to dates. The data frame looks like this:

City size_band variable value
Madrid 1 to 3 April 2020 0.74
Madrid 4 to 6 April 2020 0.71
Madrid 7 to 9 April 2020 0.78
Madrid 10 to 12 April 2020 0.77
Madrid 13 to 15 April 2020 0.72
Madrid 1 to 3 May 2020 0.81
Madrid 4 to 6 May 2020 0.79
... ... ... ...

I'm trying to create a function that plots a time series using geom_point for each city. I've tried the below code:

Cities_List<-split(data,
                    f = data$City)

# Function to plot different cities
plot.cities <- function(x) {
  for (i in 1:length(Cities_List)) {
    
    p<- x[[i]] %>%
      ggplot(aes(variable, value)) +
      geom_point(aes(color = size_band, 
                     group = size_band), 
                 size = 3, 
                 shape = size_band)
  }
}
plot.cities(Cities_list)

The color variable is not being recognised:

Error in geom_point(aes(color = size_band, group = size_band), size = 3,  : 
  object 'size_band' not found 

1 Answer 1

1

aesthetics like color and shape must be mapped within the aes function. Furthermore, function plot.cities must return something instead of assigning an internal variable p.

library(tidyverse)

data <- tibble::tribble(
  ~City, ~size_band, ~variable, ~value,
  "Madrid", "1 to 3", "April 2020", 0.74,
  "Madrid", "4 to 6", "April 2020", 0.71,
  "Madrid", "7 to 9", "April 2020", 0.78,
  "Madrid", "10 to 12", "April 2020", 0.77,
  "Madrid", "13 to 15", "April 2020", 0.72,
  "Madrid", "1 to 3", "May 2020", 0.81,
  "Madrid", "4 to 6", "May 2020", 0.79
)

Cities_List <- split(data,
  f = data$City
)

# Function to plot different cities
plot.cities <- function(x) {
  for (i in 1:length(Cities_List)) {
    x[[i]] %>%
      ggplot(aes(variable, value)) +
      geom_point(aes(color = size_band, shape = size_band), size = 3)
  }
}
plot.cities(Cities_List)

Created on 2021-12-14 by the reprex package (v2.0.1)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.