我正在使用网格渲染一系列接触的多边形,并使用 ragg 包将其保存到 png 文件中。每当我使用 ragg 包执行此操作时,我都会在多边形顶部它们接触的地方得到一个白色网格。
我认为这是一个抗锯齿人工制品,但是有没有办法让 ragg 将下面的图形渲染为蓝色的固体块?我的实际案例不是单色的,但它更好地展示了文物。
library(grid)
library(scales)
library(ragg)
# Center of rectangles
grid <- expand.grid(x = 1:10, y = 1:10)
# Centers to xmin/xmax/ymin/ymax
poly <- cbind(
c(grid$x - 0.5, grid$x + 0.5, grid$x + 0.5, grid$x - 0.5),
c(grid$y - 0.5, grid$y - 0.5, grid$y + 0.5, grid$y + 0.5)
)
# Rotate rectangles
angle <- 30 * pi / 180
rot <- matrix(c(cos(angle), sin(angle), -sin(angle), cos(angle)), 2)
poly <- t(tcrossprod(rot, poly))
# Make grob
grob <- polygonGrob(
x = rescale(poly[, 1]),
y = rescale(poly[, 2]),
id = rep(seq_len(nrow(grid)), 4),
gp = gpar(
fill = "dodgerblue",
col = NA
)
)
# Save with ragg
agg_png("test.png")
grid.newpage(); grid.draw(grob)
dev.off()
#> png
#> 2
由 reprex 包于 2021-03-25 创建(v1.0.0)
注意:cairo png 设备也会发生同样的情况。默认的
png()
设备渲染大量蓝色固体,但最外层边缘的抗锯齿效果很差。
一种可能的解决方法是将多边形边框的颜色设置为与填充相同,并具有细线宽度 - 正如
ragg
的作者/维护者所建议的。以下是相关 GitHub 问题 的示例解决方案
library(elevatr)
library(tidyverse)
library(raster)
library(ragg)
data(lake)
loc_df <- data.frame(x = runif(6,min=sp::bbox(lake)[1,1],
max=sp::bbox(lake)[1,2]),
y = runif(6,min=sp::bbox(lake)[2,1],
max=sp::bbox(lake)[2,2]))
# Example for PROJ > 5.2.0
r <- get_elev_raster(locations = loc_df, prj = sp::wkt(lake) , z=10)
#> Mosaicing & Projecting
#> Note: Elevation units are in meters.
r_xy <- as.data.frame(r, xy = TRUE, na.rm = TRUE)
names(r_xy)[3] <- "elev"
ggplot(r_xy,
aes(x, y, fill = elev, color = elev), linewidth = 0.1) +
geom_tile() +
theme_void()
创建于 2023-08-11,使用 reprex v2.0.2