具有多个孔的geom_polygon

lok*_*art 2 r polygon ggplot2

我参考了这个问题的答案,还有其他问题.

我修改了如下代码:

library(ggplot2)

ids <- letters[1:2]

# IDs and values to use for fill colour
values <- data.frame(
  id = ids,
  value = c(4,5)
)

# Polygon position
positions <- data.frame(
  id = c(rep(ids, each = 10),rep("b",5)),
  #     shape      hole         shape        hole
  x = c(1,4,4,1,1, 2,2,3,3,2,   5,10,10,5,5, 6,6,7,7,6, 8,8,9,9,8),
  y = c(1,1,4,4,1, 2,3,3,2,2,   5,5,10,10,5, 6,7,7,6,6, 8,9,9,8,8)
)

# Merge positions and values
datapoly <- merge(values, positions, by=c("id"))

chart <- ggplot(datapoly, aes(x=x, y=y)) + 
  geom_polygon(aes(group=id, fill=factor(value)),colour="grey") +
  scale_fill_discrete("Key")
Run Code Online (Sandbox Code Playgroud)

并给出以下输出:

在此输入图像描述

有一条线穿过两个彩色的盒子,我不太喜欢它,我怎么能删除它?谢谢.

Spa*_*man 7

我多年前提出的用于绘制孔的解决方案是确保在每个孔之后你的x,y坐标返回到同一个地方.这会阻止线路四处嗡嗡作响并穿过其他多边形并留下匝数算法未填充的开放区域(或者在不应该填充时填充).

所以,如果你有一个数据集,其中前27个点是你的外部,然后你有3个5,6和7个点的洞,构建一个新的数据集,它是:

newdata = data[c(1:27,28:32,27,33:38,27,39:45,27),] # untested
Run Code Online (Sandbox Code Playgroud)

注意每个洞后它如何跳回到第27点.确保你的孔顺时针方向(我认为).

然后使用newdata绘制,但只绘制,而不是绘制轮廓.如果您想要大纲,请稍后添加(使用按铃号分组的原始数据)

你有时会得到非常非常薄的伪像,其中到孔的出线与进线不完全相同,但它们几乎不可察觉.责怪布雷森汉姆.