2014-12-02 90 views
0

下面是ggplot一个阴谋,一些代码是这样的:如何用ggplot中的两行代码叠加线条上的条形图?

p <- ggplot(db,aes(x,value,color=variable)) 
p <- p+geom_line(size=1) 
p <- p+geom_point() 
p+facet_wrap(facets = ~gp, scale = 'free_x') 

enter image description here

我想柱状图添加到图中显示的两条线的差异,因为差异是不是容易在剧情中比较。我现在应该怎么做?在variable中添加一个新等级并手动计算差异(可以在图形中添加另一条线而不是条)?

数据集是在这里:

> db 
    gp x variable value 
1 13 1 mode1 71.3756 
2 13 4 mode1 74.1380 
3 13 7 mode1 74.5840 
4 13 10 mode1 74.7552 
5 13 13 mode1 74.8452 
6 13 16 mode1 74.9004 
7 13 19 mode1 74.9380 
8 16 1 mode1 71.4320 
9 16 4 mode1 74.2012 
10 16 7 mode1 74.6484 
11 16 10 mode1 74.8204 
12 16 13 mode1 74.9104 
13 16 16 mode1 74.9660 
14 16 19 mode1 75.0036 
15 19 1 mode1 71.4708 
16 19 4 mode1 74.2448 
17 19 7 mode1 74.6928 
18 19 10 mode1 74.8652 
19 19 13 mode1 74.9556 
20 19 16 mode1 75.0112 
21 19 19 mode1 75.0488 
22 13 1 mode2 77.2172 
23 13 4 mode2 78.8460 
24 13 7 mode2 79.4080 
25 13 10 mode2 79.6844 
26 13 13 mode2 79.8472 
27 13 16 mode2 79.9544 
28 13 19 mode2 80.0320 
29 16 1 mode2 77.2884 
30 16 4 mode2 78.9224 
31 16 7 mode2 79.4864 
32 16 10 mode2 79.7636 
33 16 13 mode2 79.9268 
34 16 16 mode2 80.0360 
35 16 19 mode2 80.1120 
36 19 1 mode2 77.3376 
37 19 4 mode2 78.9752 
38 19 7 mode2 79.5404 
39 19 10 mode2 79.8180 
40 19 13 mode2 79.9820 
41 19 16 mode2 80.0880 
42 19 19 mode2 80.1640 
+1

您没有提供您的数据。 – 2014-12-02 09:10:28

+0

@DavidArenburg我现在在问题中上传一个已清理的数据集。 – Kattern 2014-12-02 09:24:01

回答

2

可以使用stat_summary功能使用diff函数来计算的差异。此外,您必须从ggplot中删除color美学,并将其添加到geom_linegeom_point

library(ggplot2) 
ggplot(db, aes(x, value)) + 
    geom_line(size = 1, aes(color = variable)) + 
    geom_point(aes(color = variable)) + 
    facet_wrap(facets = ~ gp, scale = 'free_x') + 
    stat_summary(fun.y = diff, geom = "bar") 

enter image description here

+0

哇,这很好!顺便说一句,如果我有三种模式和如何指定酒吧的颜色。 – Kattern 2014-12-02 10:16:53

+0

@kattern要修改条的颜色,可以在'stat_summary'函数中使用'color'和'fill'参数,例如'fill =“green”'。 – 2014-12-02 10:48:43

+0

谢谢,但在这种情况下如何分配两种不同的颜色? – Kattern 2014-12-02 11:14:02