Saving High-Resolution ggplots: How to Preserve Semi-Transparency


This article describes solutions for preserving semi-transparency when saving a ggplot2-based graphs into a high quality postscript (.eps) file format.

Saving High-Reslution ggplots

Contents:

Create a ggplot with semi-transparent color

To illustrate this, we start by creating ggplot2-based survival curves using the function ggsurvplot() in the survminer package. The ggsurvplot() function creates survival curves with the 95% confidence bands in a semi-transparent color.

First install (if needed) survminer as follow:

install.packages("survminer")

Then type, this:

# Fit survival curves
require("survival")
fit<- survfit(Surv(time, status) ~ sex, data = lung)
# Visualize
library("survminer")
p <- ggsurvplot(fit, data = lung,
         surv.median.line = "hv", # Add medians survival
         pval = TRUE,             # Add p-value and tervals
        
         conf.int = TRUE,        # Add the 95% confidence band
         risk.table = TRUE,      # Add risk table
         tables.height = 0.2,
         tables.theme = theme_cleantable(),
         palette = "jco",
         ggtheme = theme_bw()
    )
print(p)

In the plot above, the confidence band is semi-transparent. It can be saved to a PDF file without loosing the semi-transparent color.

If you try to export the picture as vector file (EPS ), the 95% confidence interval will disappear and the saved plot looks as follow:

ggsurvplot in .eps format: confidence bands disapear

The problem is that EPS in R does not support transparency.

A simple alternative is to export the plot into SVG file format. In the following sections, we’ll describe convenient solutions to save high-quality ggplots by preserving semi-transparency.

Save ggplots with semi-transparent colors

Use cairo-based postscript graphics devices

You can use the ggsave() function in [ggplot2] as follow:

ggsave(filename = "survival-curves.eps",
       plot = print(p),
       device = cairo_eps)

Or use this:

cairo_ps(filename = "survival-curves.eps",
         width = 7, height = 7, pointsize = 12,
         fallback_resolution = 300)
print(p)
dev.off()

Note that, the argument fallback_resolution is used to control the resolution in dpi at which semi-transparent areas are rasterized (the rest stays as vector format).

Export to powerpoint

You can export the plot to Powerpoint using the ReporteRs package. ReporteRs will give you a fully editable vector format with full support for transparency as well.

We previously described how to Create and format PowerPoint documents from R software using the ReporteRs package. We also described how to export an editable ggplot from R software to powerpoint.

Briefly, to export our survival curves from R to powerpoint, the script looks like this

library('ReporteRs')
# Create a new powerpoint document
doc <- pptx()
# Add a new slide into the ppt document 
doc <- addSlide(doc, slide.layout = "Two Content"  )
# Add a slide title
doc <- addTitle(doc, "Survival Curves: Editable Vector Graphics" )
# Print the survival curves in the powerpoint
doc <- addPlot(doc, function() print(p, newpage = FALSE), 
               vector.graphic = TRUE  # Make it editable
               )
# write the document to a file
writeDoc(doc, file = "editable-survival-curves.pptx")

The output looks like this:

Editable survival curves

Edit the plot in powerpoint. See the video below: Editing ggplots Exported with ReporteRs into PWPT

Infos


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!






This page has been seen 3037 times