geom_polygon有多个孔(geom_polygon with multiple hole)

2019-06-27 05:17发布

我指的是答案这个问题 ,并有额外的问题。

我有修改的代码如下:

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")

并给出了下面的输出:

有经过两个彩色框一条线,我不很喜欢它,我怎么能删除吗? 谢谢。

Answer 1:

试试这个

ggplot(datapoly, aes(x=x, y=y)) +
  geom_polygon(aes(group=id, fill=factor(value))) +
  scale_fill_discrete("Key")



Answer 2:

我想到了几年前的吸引孔的解决方案是确保以后每个洞的x,y坐标回到同一个地方。 这将停止线四周嗡嗡的路口等多边形并且在离开该卷绕数算法不填写(或当它不应该不填)开放区域。

所以,如果你有一个数据集,其中第一个27分是你的外表,然后你有5三个孔,6和7点,构建新的数据集,则:

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

注意每个洞后,如何跳回到点27。 确保您的孔沿顺时针方向(我认为)去。

然后绘制使用newdata但只灌装,不拉丝轮廓。 如果你想要的轮廓,将它们添加后(使用环ID分组的原始数据)

有时你可以得到非常非常薄的文物,其中外出线的孔不完全画一样的进线,但它们是难以察觉的。 怪就怪布氏。



文章来源: geom_polygon with multiple hole