用于接触多边形的ragg抗锯齿

问题描述 投票:0回答:1

我正在使用网格渲染一系列接触的多边形,并使用 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()
设备渲染大量蓝色固体,但最外层边缘的抗锯齿效果很差。

r r-grid ragg
1个回答
0
投票

一种可能的解决方法是将多边形边框的颜色设置为与填充相同,并具有细线宽度 - 正如

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

© www.soinside.com 2019 - 2024. All rights reserved.