Home > Enterprise >  ggplot: set minor breaks for discrete axis AND connect geom_point with line
ggplot: set minor breaks for discrete axis AND connect geom_point with line

Time:06-13

it is a question with two missing solutions :D

  1. Connect the points with a geom_line per variable

  2. Change the x-axis, so that the 3 years are visible above the model

    library(tidyverse)
    data <- mtcars%>%
           as_tibble(rownames = "model")%>%
           mutate(jahr = 2019)%>%
           bind_rows(mtcars%>%
              as_tibble(rownames = "model")%>%
              mutate_if(is.numeric, ~.*0.9)%>%
              mutate(jahr = 2020))%>%
           bind_rows(mtcars%>%
              as_tibble(rownames = "model")%>%
              mutate_if(is.numeric, ~.*0.7)%>%
              mutate(jahr = 2021))
    
     data%>%
     filter(model %in% c("Datsun 710", "Honda Civic", "Valiant"))%>%
     gather(variable, wert, -c(model, jahr))%>%
     ggplot() 
       geom_point(data = ~filter(., jahr == 2019), 
          aes(x = model, y = wert, col = model), 
          position = position_nudge(x = -.2)) 
       geom_point(data = ~filter(., jahr == 2020), 
          aes(x = model, y = wert, col = model),
          position = position_nudge(x = 0)) 
       geom_point(data = ~filter(., jahr == 2021), 
          aes(x = model, y = wert, col = model),
          position = position_nudge(x = .2))  
      facet_wrap(~variable, scales = "free_y")
    

enter image description here

CodePudding user response:

Something like this?

library(tidyverse)

data%>%
  filter(model %in% c("Datsun 710", "Honda Civic", "Valiant"))%>%
  gather(variable, wert, -c(model, jahr))%>%
  ggplot(aes(x=model, y=wert, color = model, group = jahr)) 
  geom_point(position = position_nudge(), size=5) 
  geom_line(color="grey", size=1) 
  scale_color_manual(values = c("orange3", "green4", "purple4"), name = NULL)  
  facet_wrap(~variable, scales = "free_y") 
  theme_minimal(base_size = 20)  
  theme(legend.position = "top",  
        axis.text.x = element_text(angle = 45, hjust=1))

enter image description here

CodePudding user response:

Is this what you'd like to achieve?

(Also included a possible alternative facet_grid approach.)

library(tidyverse)

# Sample data
data <- mtcars %>%
  as_tibble(rownames = "model") %>%
  mutate(jahr = 2019) %>%
  bind_rows(mtcars %>%
    as_tibble(rownames = "model") %>%
    mutate_if(is.numeric, ~ . * 0.9) %>%
    mutate(jahr = 2020)) %>%
  bind_rows(mtcars %>%
    as_tibble(rownames = "model") %>%
    mutate_if(is.numeric, ~ . * 0.7) %>%
    mutate(jahr = 2021))

# Combining model & jahr
data %>%
  filter(model %in% c("Datsun 710", "Honda Civic", "Valiant")) %>%
  gather(variable, wert, -c(model, jahr)) %>%
  mutate(yr_mod = str_c(model, " - ", jahr)) %>%
  ggplot(aes(yr_mod, wert, col = model))  
  geom_point()  
  geom_line(aes(group = model))  
  facet_wrap(~ variable, scales = "free_y")  
  theme(axis.text.x = element_text(angle = 70, hjust = 1),
        legend.position = "none")  
  labs(x = NULL)

# Alternative presentation with facet_grid
data %>%
  filter(model %in% c("Datsun 710", "Honda Civic", "Valiant")) %>%
  gather(variable, wert, -c(model, jahr)) %>%
  ggplot(aes(jahr, wert, col = model))  
  geom_point()  
  geom_line(aes(group = model))  
  facet_grid(variable ~ model, scales = "free_y")  
  scale_x_continuous(breaks = c(2019:2021), 
                     expand = expansion(mult = c(0.5, 0.5)))  
  theme(legend.position = "none")  
  labs(x = NULL)

Created on 2022-06-12 by the reprex package (v2.0.1)

  • Related