0

I'm struggling with a problem: I created two volcano plots in ggplot2, but due to the fact that I had one outlier point in both plot, I need to add y axis break for better visualization. The problem arises when I WANT TO plot both in the same page using plot_grid from cowplot::, because it visualizes the original plot without the breaks that I set.

 p<- c1 %>%
     ggplot(aes(x = avg_log2FC,
                y = -log10(p_val_adj),
                fill = gene_type,    
                size = gene_type,
                alpha = gene_type)) + 
     geom_point(shape = 21, # Specify shape and colour as fixed local parameters    
                colour = "black") + 
     geom_hline(yintercept = 0,
                linetype = "dashed") + 
     scale_fill_manual(values = cols) + 
     scale_size_manual(values = sizes) + 
     scale_alpha_manual(values = alphas) + 
     scale_x_continuous(limits=c(-1.5,1.5), breaks=seq(-1.5,1.5,0.5))  +
     scale_y_continuous(limits=c(0,110),breaks=seq(0,110,25))+
     labs(title = "Gene expression",
          x = "log2(fold change)",
          y = "-log10(adjusted P-value)",
          colour = "Expression \nchange") +
     theme_bw() + # Select theme with a white background  
     theme(panel.border = element_rect(colour = "black", fill = NA, size= 0.5),    
           panel.grid.minor = element_blank(),
           panel.grid.major = element_blank()) 
   p1 <- p + scale_y_break(breaks = c(30, 100))
   p1

p plot without breaks: enter image description here

and p1 plot with breaks: enter image description here

The same I did for the second plot. But this is the result using plot_grid(p1,p3, ncol = 2)

enter image description here

Can you help me understanding if I'm doing something wrong? or it is just a limitation of the package?

chemdork123
  • 12,369
  • 2
  • 16
  • 32
jonny jeep
  • 383
  • 3
  • 12
  • where is that scale_y_break from? IMO, it likely has to do with what is output by this function. Might not result in an object that cowplot can deal with the same way as with a regular ggplot object. – tjebo Dec 31 '22 at 15:19
  • 1
    also, maybe consider making this a reproducible example.Likely no need to make volcano plots, just use one of the data sets like iris – tjebo Dec 31 '22 at 15:21
  • 1
    @tjebo it comes from ggbreaks package, supported by ggplot2. Yes, I should do it, I ll try to modify the dataframe making it easier. – jonny jeep Dec 31 '22 at 15:45

1 Answers1

0

OP, it seems in that ggbreak is not compatible with functions that arrange multiple plots, as indicated in the documentation for the package here. There does seem to be a workaround via either print() (I didn't get this to work) or aplot::plot_list(...), which did work for me. Here's an example using built-in datasets.

# setting up the plots
library(ggplot2)
library(ggbreak)
library(cowplot)

p1 <-
ggplot(mtcars, aes(x=mpg, disp)) + geom_point() +
  scale_y_break(c(200, 220))

p2 <-
  ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
  geom_point() + scale_y_break(c(3.5, 3.7))

Plots p1 and p2 yield breaks in the y axis like you would expect, but plot_grid(p1,p2) results in the plots placed side-by-side without the y axis breaks.

The following does work to arrange the plots without disturbing the y axis breaks:

aplot::plot_list(p1,p2)

enter image description here

chemdork123
  • 12,369
  • 2
  • 16
  • 32