2

使用geom_polygon示例中的 MWE 并生成 svg 文件。

ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3"))

values <- data.frame(
  id = ids,
  value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5)
)

positions <- data.frame(
  id = rep(ids, each = 4),
  x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3,
  0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
  y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5,
  2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2)
)

# Currently we need to manually merge the two together
datapoly <- merge(values, positions, by=c("id"))

(p <- ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=value, group=id)) + 
  geom_path(color="white"))
dev.copy(svg, "Polygon.svg")
dev.off()

这会很好地生成一个 svg 文件,但有一个小缺点:当图片尺寸增加时(如预期的那样),“边框”会增加。从我在这里看到的(动态 SVG 图形中的常量边框)来看,这是 svg 文件的正常行为。问题是我将这些路径解释为“边界”或“边界”而不是区域,因此它们“应该”在每个缩放级别都具有恒定的宽度。

从 R 生成图片的最佳方法是什么,它允许在多边形内部实现类似 svg 的可扩展性,但又尊重路径/边界/边界的零维宽度?

这个问题的背景是根据澳大利亚选举部门制作地图。(请参阅使用 ggplot2 绘制澳大利亚选举分区。)除了按照作者的建议进行子集设置外,我还想生成一个可以放大较小分区的文件(例如悉尼周围)。欢迎提出有关全新方法的建议,尽管我更喜欢与ggplot2.

4

0 回答 0