Spooked
Spooked

Reputation: 596

Creating a plot for each column of a dataframe and create a list of plots

I want to create a QQplot for each column in a dataframe then return as a list of plots

A small section of my df

structure(list(LAB.ID = c(4L, 3L, 8L, 7L, 4L, 5L, 2L, 2L, 3L, 
10L, 5L, 12L, 7L, 12L, 7L, 10L, 2L, 8L, 5L, 12L, 4L, 8L, 10L, 
3L, 4L, 5L, 10L, 3L, 7L, 5L, 8L, 3L, 12L, 4L, 2L, 2L, 10L, 3L, 
4L, 8L, 2L, 5L, 10L, 12L, 7L, 7L, 8L, 12L), Fe = c(56.39, 56.83, 
56.382, 56.48, 56.43, 56.32, 55.94, 55.7, 56.54, 56.3, 56.29, 
56.11, 56.4, 56.46, 56.54, 56.5, 56.59, 56.258, 56.31, 56.1, 
56.53, 56.442, 56.2, 56.18, 56.31, 56.32, 56.5, 56.5, 56.43, 
56.39, 56.258, 56.51, 56.35, 56.47, 56.5, 55.98, 56.7, 56.34, 
56.35, 56.532, 55.93, 56.32, 56.5, 56.36, 56.73, 56.62, 56.264, 
56.37), SiO2 = c(7.67, 7.84, 7.936, 7.77, 7.74, 7.91, 7.63, 7.65, 
7.69, 7.872684992, 7.84, 7.64, 7.83, 7.71, 7.76, 7.851291827, 
7.73, 7.685, 7.96, 7.71, 7.62, 7.863, 7.872684992, 7.59, 7.81, 
7.87, 7.722932832, 7.77, 7.78, 7.84, 7.838, 7.74, 7.65, 7.66, 
7.67, 7.67, 7.680146501, 7.64, 7.8, 7.828, 7.67, 7.92, 7.615967003, 
7.82, 7.65, 7.74, 7.767, 7.68), Al2O3 = c(2, 2.01, 2.053, 1.88, 
2.03, 2.02, 2.01, 2.02, 2.01, 2.002830415, 2.02, 2.09, 1.9, 2.05, 
1.89, 2.021725042, 2.03, 2.044, 2.05, 1.96, 1.99, 2.041, 2.021725042, 
2, 2.01, 2.03, 1.983935789, 2.02, 1.88, 2.02, 2.038, 2.02, 2.09, 
2.01, 2.01, 2.02, 2.002830415, 2.03, 2.01, 2.008, 2, 2.03, 2.021725042, 
2.06, 1.88, 1.87, 2.02, 2.02)), row.names = c(NA, -48L), class = "data.frame")


I have the following code

library(purr)

qqplots <- imap(df[-1], ~{
  ggplot(df[-1], aes(sample = .y)) + # Create QQplot with ggplot2 package
  ggtitle(paste0(.y, " Q-Q Plot")) +
  theme(plot.title = element_text(hjust = 0.5)) +
  ylab('Grade %')+
  stat_qq() +
  stat_qq_line(col = "red", lwd = 0.5)
  })

which produces many plots like below

enter image description here

but what I am expecting is something like this enter image description here

what am I doing wrong?

Upvotes: 0

Views: 450

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389235

You can use :

library(ggplot2)

qqplots <- purrr::imap(df[-1], ~{
  ggplot(df, aes(sample = .data[[.y]])) + # Create QQplot with ggplot2 package
    ggtitle(paste0(.y, " Q-Q Plot")) +
    theme(plot.title = element_text(hjust = 0.5)) +
    ylab('Grade %')+
    stat_qq() +
    stat_qq_line(col = "red", lwd = 0.5)
})

Or with lapply :

qqplots <- lapply(names(df)[-1], function(x) {
  ggplot(df, aes(sample = .data[[x]])) + 
    ggtitle(paste0(x, " Q-Q Plot")) +
    theme(plot.title = element_text(hjust = 0.5)) +
    ylab('Grade %')+
    stat_qq() +
    stat_qq_line(col = "red", lwd = 0.5)
})

Upvotes: 1

Related Questions