Home > OS >  Save par(mfrow) multipanel output as svg
Save par(mfrow) multipanel output as svg

Time:10-25

I'm using par(mfrow) to generate a multi-panel plot of three separate graph output objects. Sample code below represents a very simplified version of the objects I have.

How can I save these plots as a single object with ggsave? I've tried naming the par(mfrow) as an object and plotting it, but that doesn't seem to work.

Any advice on alternative ways of generating/saving a multi-panel plot is also welcome! Please let me know if I can clarify the question or example. Thanks!

par(mfrow = c(1,3), mar = c(10, 5, 5, 3), xpd = TRUE) 
hist(x = rnorm(100), col = "skyblue", main = "X")
hist(x = rnorm(50), col = "green", main = "Y")
legend("bottom", c("Blue", "Green", "Purple"),
        title = "Sample Data", horiz = TRUE, inset = c(0, -0.4),
        col = c("skyblue", "green", "purple"), pch = rep(15,2),
        bty = "n", pt.cex = 1.5, text.col = "black")
hist(x = rnorm(75), col = "purple", main = "Z")

CodePudding user response:

I would suggest using svglite over svg if you want to edit the graph using Inkscape or a similar program since you will not be able to edit the text (change the text, font, or size) in a file produced by svg. Here is an example with a few edits to your original code:

library(svglite)
svglite("MyPlots.svg", width=8, height=6)
par(mfrow = c(1,3), mar = c(10, 5, 5, 3), xpd = TRUE, mgp=c(1.75, .75,  0)) 
hist(x = rnorm(100), col = "skyblue", main = "X")
hist(x = rnorm(50), col = "green", main = "Y")
legend("bottom", c("Blue", "Green", "Purple"),
        title = "Sample Data", horiz = TRUE, inset = c(0,  -0.2),
        col = c("skyblue", "green", "purple"), pch = rep(15,2),
        bty = "n", pt.cex = 1.5, text.col = "black")
hist(x = rnorm(75), col = "purple", main = "Z")
dev.off()

Plot

  • Related