Home > Software engineering >  How to specify multiple xlims for facetted data in ggplot2 R?
How to specify multiple xlims for facetted data in ggplot2 R?

Time:04-24

The data is facetted by two variables (see graph). Each variable has a different range. I want to specify the range so that all plots in var1 and vae2 are bound by the min and max values of those variables. See sample code attached. I don't want to use setscales = "free" on facet_wrap.

var1 <- rnorm(100, 6, 2)
var2 <- rnorm(100,15,2)
spp.val <- rnorm(100,10,2)
spp <- rep(c("A","B","C","D"), 25)

df <- data.frame(var1, var2,spp, spp.val)

df <- gather(df,
key = "var",
value = "var.val",
var1,var2)

df$var <- as.factor(as.character(df$var))
df$spp <- as.factor(as.character(df$spp))

ggplot(aes(x = var.val, y = spp.val), data = df)  
  geom_point()  
  facet_grid(spp~var)

#I want the limits for each facet_grid to be set as follows
xlim(min(df[df$var == "var1",]), max(df[df$var == "var1",])
xlim(min(df[df$var == "var2",]), max(df[df$var == "var2",])

enter image description here

CodePudding user response:

Is this what you want?

library(tidyverse)

tibble(
  var1 = rnorm(100, 6, 2),
  var2 = rnorm(100, 15, 2),
  spp.val = rnorm(100, 10, 2),
  spp = rep(c("A", "B", "C", "D"), 25)
) |> 
  pivot_longer(starts_with("var"), names_to = "var", values_to = "var.val") |> 
  mutate(across(c(spp, var), factor)) |> 
  ggplot(aes(var.val, spp.val))  
  geom_point()  
  facet_grid(spp ~var, scales = "free_x")

Created on 2022-04-23 by the reprex package (v2.0.1)

  • Related