rnorouzian
rnorouzian

Reputation: 7517

Same variables from 2 separate data.frames sided by side in ggplot2

I want to plot the exact same variable names (ses & math) from 2 separate data.frames (dat1 & dat2) but side by side so I can visually compare them.

I have tried the following but it places both data.frames on top of each other.

Is there a function within ggplot2 to plot ses vs. math from dat1 and the same from dat2 side by side and placed on the same axes scales?

library(ggplot2)

dat1 <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/hsb.csv')
dat2 <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/sm.csv')

ggplot(dat1, aes(x = ses, y = math, colour = factor(sector))) +
  geom_point() + 
  geom_point(data = dat2, aes(x = ses, y = math, colour = factor(sector)))

Upvotes: 0

Views: 36

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389175

You can try faceting combining the two datasets :

library(dplyr)
library(ggplot2)

list(dat1 = dat1 %>% 
              select(sector,ses, math) %>%
              mutate(sector = as.character(sector)) , 
    dat2 = dat2 %>% select(sector,ses, math)) %>%
  bind_rows(.id = 'name') %>%
  ggplot() + 
  aes(x = ses, y = math, colour = factor(sector)) +
  geom_point() +
  facet_wrap(.~name)

enter image description here


Another option is to create list of plots and arrange them with grid.arrange :

list_plots <- lapply(list(dat1, dat2), function(df) {
  ggplot(df, aes(x = ses, y = math, colour = factor(sector))) +  geom_point()
})

do.call(gridExtra::grid.arrange, c(list_plots, ncol = 2))

Upvotes: 2

Related Questions