【问题标题】:geom_polygon with multiple hole带有多个孔的 geom_polygon
【发布时间】:2012-08-21 02:19:26
【问题描述】:

我参考了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")

并给出以下输出:

有一条线穿过两个彩色框,我不太喜欢它,我该如何删除它?谢谢。

【问题讨论】:

    标签: r ggplot2 polygon


    【解决方案1】:

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

    因此,如果您有一个数据集,其中前 27 个点是您的外部点,然后您有 5、6 和 7 个点的三个孔,请构建一个新数据集:

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

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

    然后使用 newdata 绘制,但只填充,不绘制轮廓。如果您需要轮廓,请稍后添加(使用按环 id 分组的原始数据)

    您有时会得到非常薄的伪影,其中孔的出线与入线的绘制不太一样,但它们几乎不引人注意。怪布雷森汉姆。

    【讨论】:

      【解决方案2】:

      试试这个

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

      【讨论】:

        猜你喜欢
        • 2016-10-06
        • 2020-03-17
        • 2015-05-17
        • 2017-09-24
        • 2017-12-19
        • 1970-01-01
        • 2023-03-30
        • 2019-11-07
        • 2013-05-06
        相关资源
        最近更新 更多