R ggplot2 geom_line位置闪避

时间:2016-04-20 21:32:41

标签: r ggplot2

我找不到一个如何做到这一点的例子。我正在尝试使用geom_line绘制线条,但是避开重叠的元素,它似乎不起作用。

这是我的数据:

> sa
    id ep type grp variable value
 1:  1  1 typ1   1       st     1
 2:  1  2 typ1   2       st    60
 3:  1  3 typ1   3       st   120
 4:  1  1 typ2   4       st    20
 5:  1  2 typ2   5       st    60
 6:  2  1 typ1   6       st     1
 7:  2  2 typ1   7       st    80
 8:  2  3 typ1   8       st   170
 9:  2  1 typ2   9       st    10
10:  2  2 typ2  10       st    60
11:  2  3 typ2  11       st   120
12:  1  1 typ1   1       en    50
13:  1  2 typ1   2       en   100
14:  1  3 typ1   3       en   150
15:  1  1 typ2   4       en    40
16:  1  2 typ2   5       en   100
17:  2  1 typ1   6       en    40
18:  2  2 typ1   7       en   150
19:  2  3 typ1   8       en   200
20:  2  1 typ2   9       en    50
21:  2  2 typ2  10       en    90
22:  2  3 typ2  11       en   190

以下是我的简单代码,试图躲避typ1typ2的重叠值

 ggplot(sa,aes(x=value,y=id,group=grp,color=type)) + geom_line(size=6,position="dodge")

plot I get

这就是我所看到的。如何避开重叠的条形图?

2 个答案:

答案 0 :(得分:6)

我认为你不能垂直躲闪,但另一种选择只是增加一点躲避自己。例如:

eps = 0.05

ggplot(sa, aes(x=value, y=ifelse(type=="typ1", id + eps, id - eps), 
              group=grp, color=type)) + 
  geom_line(size=6) +
  scale_y_continuous(breaks=1:2, limits=c(min(sa$id-eps), max(sa$id+eps)))

你必须使用躲避量,轴限制等,以获得给定宽高比所需的外观。

enter image description here

答案 1 :(得分:6)

你只能水平躲闪,但你可以通过翻转你的x和y美学并使用coord_flip来解决这个问题:

ggplot(sa, aes(x = id, y = value, group = grp, color = type)) + 
    geom_line(size = 6, position = position_dodge(width = 0.1)) + 
    coord_flip()

dodged plot