具有多个孔的geom_polygon

时间:2012-08-21 02:19:27

标签: r ggplot2 polygon

我参考this question的答案,还有其他问题。

我修改了以下代码:

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

并提供以下输出:

enter image description here

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

你有时会得到非常非常薄的文物,其中到洞的出口线与进入的线不是很相同,但它们几乎不可察觉。责怪布雷森汉姆。

答案 1 :(得分:2)

试试这个

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

enter image description here