在ggplot2中绘制带有空洞的多边形时会出现撕裂问题。

4

我正在尝试绘制这些身体地图,但无法正确显示面部。 "头部"由两个多边形组成:一个是脸(实心椭圆),另一个是头部的其余部分(甜甜圈形状,中间有孔)。 这些应该根据“分数”列的值进行着色。 我已经尝试了很多关于group=group放置位置和fill=scale的变化。

comparison of real data

  ggplot(data=Patients, aes(y=lat, 
                            x=long, 
                            fill=factor(score), 
                            group=group))+
    geom_polygon(color="black")+
    facet_wrap(~Patient, 
               ncol = 5)+
    scale_fill_manual(values=scoreColor)+
    coord_fixed()

非常感谢您的帮助。

以下是我尝试创建可重现示例的代码:

library(ggplot2)
fortifyResults <-read.table(header=T, stringsAsFactors = F, text="
                  long  lat order   hole    piece   group   id  score
                  1 1   1   FALSE   1   Outer.1 Outer   20
                  1 4   2   FALSE   1   Outer.1 Outer   20
                  4 4   3   FALSE   1   Outer.1 Outer   20
                  4 1   4   FALSE   1   Outer.1 Outer   20
                  1 1   5   FALSE   1   Outer.1 Outer   20
                  2 2   6   TRUE    2   Outer.2 Outer   20
                  3 2   7   TRUE    2   Outer.2 Outer   20
                  3 3   8   TRUE    2   Outer.2 Outer   20
                  2 3   9   TRUE    2   Outer.2 Outer   20
                  2 2   10  TRUE    2   Outer.2 Outer   20
                  2 2   11  FALSE   1   Inner.1 Inner   10
                  2 3   12  FALSE   1   Inner.1 Inner   10
                  3 3   13  FALSE   1   Inner.1 Inner   10
                  3 2   14  FALSE   1   Inner.1 Inner   10
                  2 2   15  FALSE   1   Inner.1 Inner   10
                  ")

这个版本的代码没有显示两个部分(尽管它们在图例中)

ggplot(data=fortifyResults, aes(y=lat, x=long, group=group))+
  geom_polygon(aes(fill=factor(score)),color="black")

而这个会导致撕裂

ggplot(data=fortifyResults, aes(y=lat, x=long), group=group)+
  geom_polygon(aes(fill=factor(score)),color="black")

comparison of example

我读到过点的方向很重要。这就是方向的表示方法。

ggplot(data= fortifyResults, aes(y=lat, x=long, group=group))+   
  geom_polygon(fill="yellow", color="black")+
  geom_text(aes(label=order),hjust=0, vjust=-0.3)+
  facet_wrap(~id)

enter image description here

再次强调,这里标题为“outer”的应该在中间有一个洞(hole==TRUE)。根据我所读的,它们应该走向另一个方向。我尝试过反转逻辑,改变点的方向以及其他一些操作。希望你们能够帮忙。


1
如果您仍在寻找答案,现在我们有来自ggpolypath包的geom_polypath,它专门为此用例而设计。请参见此处 - Z.Lin
1个回答

2
library(ggpolypath)

ggplot(data = fortifyResults, aes(y = lat, x = long, group = group)) +
    geom_polypath(aes(fill = factor(score)), color = "black")

1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接