How to Export a Graph from RStudio for a Poster

A practical guide to making poster-ready figures in R with ggplot2 and exporting them at fixed dimensions using ggsave().

Overview

When creating a poster in PowerPoint, figures should be designed and exported from R at their final size rather than resized later.

This requires a deliberate workflow that controls both the appearance of the plot and how it is saved.

  • Create figures using ggplot2
  • Use a large base font size suitable for posters
  • Export figures with ggsave() using fixed dimensions (in inches)
  • Insert into PowerPoint without major resizing

This produces figures that are readable, properly scaled, and consistent across the poster.

The Problem

A common issue is getting a figure from R into PowerPoint that is actually readable on a poster.

Many students use approaches that seem convenient but produce poor results:

  • copying a figure from the Plots tab in RStudio
  • using the Export button in the Plots tab adjusting image size and font size
  • taking a screenshot of the graph

These approaches do not preserve control over:

  • figure size
  • text size
  • resolution
  • aspect ratio (length to width ratio)

As a result, when the figure is placed into PowerPoint and resized:

  • text becomes too small to read
  • images appear blurry or pixelated
  • plots become stretched or distorted
  • facet panels become cramped
  • figures look inconsistent across the poster

General Approach

The solution is to design and export figures in R at the exact size they will appear in PowerPoint.

This means:

  • deciding how much space the figure will occupy (e.g., half-column or full-column)
  • setting text size appropriate for poster viewing
  • exporting the image with fixed width and height in inches
  • avoiding major resizing after insertion into PowerPoint

This approach ensures:

  • readable text
  • clean image quality
  • correct proportions
  • consistent layout across figures

Examples

The example below uses the penguins dataset from the palmerpenguins package.

Example 1: Full-column figure

This example saves a figure that takes up the entire width of a poster column, 13.5 inches.

Setting base_size = 20 yields a good font size for this image.

Example 2: Half-column figure

This version uses the same graph but creates a smaller image suitable for half of a poster column.

Because the image is smaller, there isn’t as much room for text on the figure. You can alleviate this problem by moving the legend to the bottom of the graph.

Then save the image using ggsave().

  • Make the base font size smaller when saving the image (e.g. 16)
  • Note: The theme() layer is repeated here because adding theme_bw() resets any theme elements that had been customized in the previous step.

Facetted graphs

  • Facetted plots require additional layout control to remain readable on a poster
  • Use facet_wrap() with the ncol argument to control the number of columns
  • Adjust ncol based on the width of the figure:
    • half-column figure:
      • use ncol = 1 or ncol = 2
    • full-column figure:
      • use ncol = 3 or more
  • Choose a layout that:
    • keeps each panel large enough to read
    • avoids overcrowding
    • makes efficient use of available space
  • The best choice depends on:
    • the type of plot
    • the number of facets
    • how much detail each panel contains
  • Expect to adjust both ncol and figure height to get a clean result

Example 3: Facetted figure

This example uses facets and adjusts the facet layout with ncol.

Note that the color legend can be removed because it is now redundant with the facet labels.

To export that image for a full column width:

Example 4: Facetted figure with vertical layout

For a narrower version of the same facetted graph, you might change the facet layout to ncol = 1. This creates a vertical stack of panels that can be saved as a half-column figure.

Like the half-column example above, the resulting figure will have a title that is too large and a color legend that takes up too much space on the side of the graph. Rather than making the base font size smaller on this graph (its still a large, featured graph, just vertically oriented), we can tweak some other elements:

  • Keep the title from being too long, by giving the plot a new title using labs():

    • Make the title shorter, e.g. title = "Penguin Measurements"

    • Move info to an optional subtitle, e.g. subtitle = "Body mass vs. flipper length"

    • Keep the original title, but put in a manual line break \n, e.g. title = "Penguin body mass vs.\nflipper length"

  • Move the legend to the bottom of the graph, and style is so it looks nice there, using theme():

    • Move it to the bottom with legend.position = "bottom"

    • Put the legend title above the legend with legend.title.position = "top"

    • Center the legend title with legend.title = element_text(hjust = .5)

Here is the figure with a single column of facets, a wrapped title, and a repositioned legend:

To export this version for a half-column width: