FranzGoogle
FranzGoogle

Reputation: 481

How to remove unwanted horizontal lines added to raster image by ggsave?

I can't solve a problem I found when plotting and saving an image from raster with the ggsave() function in R.
When I plot it, it works well. When I use ggsave() to export it, horizontal gray lines are added to the plot.
I want to remove them but I don't know how to do it.
That's an example image with the options and the code I used: enter image description here

gg.opzioni = list(geom_tile(aes(x, y, fill = values)),
                  scale_fill_gradientn(n.breaks = 3, colours = c("#52647A", "#2C413C", "#646859"), guide = "legend", na.value = "white"),
                  theme(plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
                        axis.title.x = element_text(size = 12), axis.title.y = element_text(size = 12),
                        plot.margin = unit(c(2, 2, 2, 2), "mm"), panel.background = element_blank(),
                        panel.border = element_rect(colour = "black", fill = NA, size = 1),
                        axis.text.x = element_blank(), axis.ticks.x = element_blank(), axis.text.y = element_blank(),
                        axis.ticks.y = element_blank(), panel.grid.minor = element_blank(), panel.grid.major = element_blank(),
                        panel.grid.major.x = element_blank(), panel.grid.major.y = element_blank(),
                        panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), aspect.ratio = 11/10),
                  scale_x_continuous(limits = c(0, 1), expand = c(0, 0), breaks = seq(0, 1, 0.1), labels = seq(0, 10, 1)),
                  scale_y_continuous(limits = c(0, 1), expand = c(0, 0), breaks = seq(0, 1, 0.1), labels = seq(0, 10, 1)),
                  coord_fixed())

r.sam = ggplot(df) + gg.opzioni + labs(title = "Campione ricostruito", x = "", y = "", fill = "classe:")
ggsave(filename = "lapalma_sam.png", plot = r.sam, device = "png", path = "/Users/Francesco/Downloads/")

I tried to remove the possible grid with the panel.grid options, but it didn't work.

Originally three variables are included in the df object: two of coordinates and one with the pixel class.

Upvotes: 2

Views: 611

Answers (1)

jdobres
jdobres

Reputation: 11957

library(tidyverse)

df <- tibble(
  val = rep(sin(seq(0, 4*pi, length = 100)), 100),
  x = rep(1:100, 100),
  y = rep(1:100, each = 100)
)

The following replicates your problem, where horizontal lines are visible around each cell:

plot.tiles <- ggplot(data = df, aes(x = x, y = y, fill = val)) +
  geom_tile()
ggsave('plot_tile.png', plot.tiles)  

enter image description here

This arises because geom_tile() has a border color property. One solution is to make the "color" aesthetic match the "fill" aesthetic:

plot.border <- ggplot(data = df, aes(x = x, y = y, fill = val, color = val)) +
  geom_tile()
ggsave('plot_border.png', plot.border)  

enter image description here

Or you can use geom_raster(), which does not have a cell border, but functions similarly to geom_tile():

plot.raster <- ggplot(data = df, aes(x = x, y = y, fill = val)) +
  geom_raster()
ggsave('plot_raster.png', plot.raster)  

enter image description here

Upvotes: 2

Related Questions