我参考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")
并提供以下输出:
有一条线穿过两个彩色的盒子,我不太喜欢它,我怎么能删除它?感谢。
答案 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")