issue saving R plot with transparent background

Achak picture Achak · Jul 22, 2015 · Viewed 8.2k times · Source

I am trying to save a r plot with transparent background with png format. I have followed few recommended method in stackoverflow but every time I am still getting the white background. My test date is as follows:

structure(list(wd = c(7.5, 22.5, 37.5, 52.5, 67.5, 82.5, 97.5, 
112.5, 127.5, 142.5, 157.5, 172.5, 187.5, 202.5, 217.5, 232.5, 
247.5, 262.5, 277.5, 292.5, 307.5, 322.5, 337.5, 352.5), MP1 = c(17.6, 
21, 20.5, 26.5, 32.7, 38.3, 40.7, 41.8, 41.6, 44.4, 52.4, 62.5, 
70.7, 74.4, 71.1, 66.9, 66.9, 69.4, 69.4, 67.4, 63.4, 55.9, 43.9, 
33.9)), .Names = c("wd", "MP1"), class = "data.frame", row.names = c(NA, 
-24L))

I tried two methods but both fail to remove the background.

method 1:

library(ggplot2)
library(cairo)

ggplot(dat, aes(wd, MP1)) +
  coord_polar( start = 0, direction = 1) +
  xlab("")+
  ylab("")+
  scale_x_continuous(limits = c(0, 360), expand = c(0, 0), breaks = seq(0, 360-1, by = 90), labels=c("North", "East","South", "West")) +
  geom_vline(xintercept = seq(0, 360-1, by = 15), colour = "grey90", size = 0.2) +
  geom_bar(width=15, stat='identity', fill= "cyan", colour= "white") +
  theme_bw() +
  theme(panel.border = element_blank(),
        legend.key = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank(),
        axis.text.x = element_blank(),
        panel.grid = element_blank())

Cairo(width = 640, height = 480, file="test.png", type="png", 
      bg = "transparent")

dev.off()

method 2:

png("test.png", width = 4 * 800,
    height = 4 * 800, res = 600)

ggplot(dat, aes(wd, MP1)) +
  coord_polar( start = 0, direction = 1) +
  xlab("")+
  ylab("")+
  scale_x_continuous(limits = c(0, 360), expand = c(0, 0), breaks = seq(0, 360-1, by = 90), labels=c("North", "East","South", "West")) +
  geom_vline(xintercept = seq(0, 360-1, by = 15), colour = "grey90", size = 0.2) +
  geom_bar(width=15, stat='identity', fill= "cyan", colour= "white") +
  theme_bw() +
  theme(panel.border = element_blank(),
        legend.key = element_blank(),
        axis.ticks = element_blank(),
        axis.text.y = element_blank(),
        axis.text.x = element_blank(),
        panel.grid = element_blank(),
       plot.background = element_rect(fill = NULL,colour = NA))

dev.off()

Unfortunately neither method gives me a transparent background and still show a white background if I add to a ArcGIS or Microsoft word document.

I would really appreciate any advise to what possibly I am doing wrong as I am not getting any error messages but just not getting the transparent background. Many thanks in advance

Answer

Achak picture Achak · Jul 26, 2015

based on the comment received from @Molx and @aosmith the following answer worked for me so I am just posting if anyone find this useful in the future for their work:

 ggplot(dat, aes(wd, MP1)) +
      coord_polar( start = 0, direction = 1) +
      xlab("")+
      ylab("")+
      scale_x_continuous(limits = c(0, 360), expand = c(0, 0), breaks = seq(0, 360-1, by = 90), labels=c("North", "East","South", "West")) +
      geom_vline(xintercept = seq(0, 360-1, by = 15), colour = "grey90", size = 0.2) +
      geom_bar(width=15, stat='identity', fill= "cyan", colour= "white") +
      theme_bw() +
      theme(panel.border = element_blank(),
            legend.key = element_blank(),
           axis.ticks = element_blank(),
           axis.text.y = element_blank(),
           axis.text.x = element_blank(),
           panel.grid = element_blank(),
           panel.grid.minor = element_blank(), 
           panel.grid.major = element_blank(),
                   panel.background = element_blank(),
               plot.background = element_rect(fill = "transparent",colour = NA))

    ggsave("test.png", bg = "transparent")