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

August 4, 2017

(This article was first published on Easy Guides, and kindly contributed to R-bloggers)

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


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:


Then type, this:

# Fit survival curves
fit<- survfit(Surv(time, status) ~ sex, data = lung)

# Visualize
p <- ggsurvplot(fit, data = lung,
         surv.median.line = "hv", # Add medians survival
         pval = TRUE,             # Add p-value and tervals
         = 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()

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 or SVG, …), 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.

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)


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


# 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


To leave a comment for the author, please follow the link and comment on their blog: Easy Guides. offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)