When working with plots in R, you can face the error: Error in plot.new() figure margins too large.
This error occurs when there is not enough space for the plot due to the size of the margins compared to the plotting window. Fortunately, there are straightforward solutions to this problem!
In this blog post we will go through the causes of the error, an example to reproduce the error and step-by-step solutions with R code examples.
Let’s get started!
Causes of the Error
The error occurs when:
- The plotting window is too small: When the plot area is too small for the plot’s margins, R fails to draw the plot.
- Large margin settings: Margins can be explicitly set too large, leaving insufficient room for the plot.
Example to Replicate the Error
Here is an example of huge margins that will cause the plot.new(): figure margins too large error.
# Set very large margins par(mar = c(100, 100, 100, 100)) # bottom, left, top, right # Attempt to plot plot(cars)
In the above code:
- The
par()
function sets the huge margins with themar
parameter. - When you try to plot using
plot(cars)
, R cannot assign enough space for the plot due to these large margins, resulting in the error.
Now for the solution!
Solution 1: Adjust the mar
Parameter
R uses the mar
graphical parameter to control the size of margins. The mar
argument is a numeric vector of length 4, which specifies the size of the margins in this order:
- Bottom
- Left
- Top
- Right
Sometimes, margins are set too large relative to the plotting area. You can adjust this setting by modifying the mar
parameter.
Steps to Fix:
The par() function can set smaller margins before calling your plot
function.
# Reduce the margins par(mar = c(4, 4, 2, 2)) # bottom, left, top, right plot(cars)
This will reduce the margin sizes, making more room for the plot to render correctly.
Solution 2: Set a Specific Graphic Device Size
Another way to avoid this error is to explicitly set the graphic device size when using functions like pdf()
, png()
, or jpeg()
.
Example:
# Set a larger graphic device size pdf("plot_output.pdf", width = 10, height = 8) plot(cars) dev.off()
This ensures that the graphic device is large enough to accommodate the plot and its margins.
Solution 3: Reset Default Graphical Parameters
If you have earlier experimented with custom graphical parameters (like margins or layout settings), it may be helpful to reset them to their default values. The par()
function can do this.
Example:
# Reset graphical parameters to defaults dev.off() # This resets all graphical parameters plot(cars)
Alternatively, if you’re using a multi-panel layout (i.e., dividing the plotting area into multiple subplots), you may have set the mfrow
or mfcol
parameters, which divide the plot area into rows and columns. These settings can sometimes cause the error due to insufficient space for each plot.
Understanding mfrow
and mfcol
in Multi-Panel Layouts
The par()
function allows you to split the plotting window into multiple subplots using the mfrow
and mfcol
parameters:
mfrow
: Specifies the number of rows and columns in which plots will be drawn. It fills plots by row.mfcol
: Similar tomfrow
, but fills plots by column.
If you set these parameters to create multiple plots in the same window, and if there’s not enough space to accommodate them all, you might face the figure margins too large
error.
Example of Using mfrow
to Cause the Error:
# Set up a 2x2 plotting layout with large margins par(mfrow = c(2, 2), mar = c(100, 100, 100, 100)) # Try to plot multiple graphs plot(cars) plot(cars) plot(cars) plot(cars)
In this example, we try to plot 4 graphs in a 2×2 grid, but with the margins set too large (mar = c(100, 100, 100, 100)
), the available space for each plot is too small, resulting in the error.
Solution:
Reduce the margins and try again.
# Set up a 2x2 plotting layout with smaller margins par(mfrow = c(2, 2), mar = c(4, 4, 2, 2)) # Now plot again plot(cars) plot(cars) plot(cars) plot(cars)
Here, we use a 2×2 layout (mfrow = c(2, 2)
) but reduce the margins to a reasonable size (mar = c(4, 4, 2, 2)
), which should solve the problem.
Solution 4: Resize the Plotting Window
In R, the size of the plotting window is determined by either the graphical parameters or the device you’re using to view the plots. For instance, if you’re working in RStudio, the plotting window in the lower right panel might be too small.
Steps to Fix:
- Increase the size of the plotting window by dragging its corner to expand.
- If you’re using an external plotting device (e.g.,
pdf()
,png()
), adjust the dimensions specified when opening the device.
Example:
If you’re working in RStudio and encounter this error, expand the plotting window in the lower-right corner. Then try to re-run your plotting code:
plot(cars)
Conclusion
The error plot.new(): figure margins too large
is fairly common when working with plots in R, but it’s easily resolved by adjusting either the plotting window size, margin settings, or the plotting device. If you follow the solutions outlined in this post, you should be able to remove the error and continue working with your plots smoothly.
Key Takeaways:
- Resize your plotting window in RStudio or any other environment.
- Adjust the
mar
parameter to make margins smaller. - Set larger plotting device sizes for external devices.
- Reset graphical parameters when necessary, especially when using multi-panel layouts with
mfrow
ormfcol
.
Try out these solutions the next time you face this error, and happy plotting!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.