2016-05-04 34 views
0

我有一个小数据集,本地,(5观察)有两种类型:a和b。每个观察都有一个日期字段(p.start),一个比率和一个持续时间。ggplot2 facet_wrap geom_text不接受日期值

local 

    principal p.start duration allocated.days ratio 
1   P 2015-03-18  1  162.0000 162.0000 
2   V 2015-08-28  4  24.0000 6.0000 
3   V 2015-09-03  1  89.0000 89.0000 
4   V 2015-03-30  1  32.0000 32.0000 
5   P 2015-01-29  1  150.1667 150.1667 

str(local) 

'data.frame': 5 obs. of 5 variables: 
$ principal  : chr "P" "V" "V" "V" ... 
$ p.start  : Date, format: "2015-03-18" "2015-08-28" "2015-09-03" "2015-03-30" ... 
$ duration  : Factor w/ 10 levels "1","2","3","4",..: 1 4 1 1 1 
$ allocated.days: num 162 24 89 32 150 
$ ratio   : num 162 6 89 32 150 

我有另一个数据框,统计,与文本添加到一个多面情节。

stats 

    principal   xx yy   zz 
1   P 2015-02-28 145.8 Average = 156 
2   V 2015-02-28 145.8 Average = 24 

str(stats) 

'data.frame': 2 obs. of 4 variables: 
$ principal: chr "P" "V" 
$ xx  : Date, format: "2015-02-28" "2015-02-28" 
$ yy  : num 146 146 
$ zz  : chr "Average = 156" "Average = 24" 

下面的代码失败:

p  = ggplot (local, aes (x = p.start, y = ratio, size = duration)) 
p  = p + geom_point (colour = "blue"); p 
p  = p + facet_wrap (~ principal, nrow = 2); p 
p  = p + geom_text(aes(x=xx, y=yy, label=zz), data= stats) 
p 
Error: Continuous value supplied to discrete scale 

任何想法?我错过了一些明显的东西。

+1

我无法重现你的错误消息。我在eval(expr,envir,enclos):object'duration'not found“中得到了”Error“,这是因为'stats'中没有列'duration'。你确定你正在运行你显示的代码吗?你使用的是哪个版本的'ggplot2'? – Stibu

回答

1

问题是您正在绘制2个data.frames,但您的初始ggplot调用包括aes参数,仅指local data.frame。

所以,虽然你geom_text指定data=stats,它仍然在寻找size=duration

下面一行对我的作品:

ggplot(local) + 
    geom_point(aes(x=p.start, y=ratio, size=duration), colour="blue") + 
    facet_wrap(~ principal, nrow=2) + 
    geom_text(data=stats, aes(x=xx, y=yy, label=zz)) 
1

刚刚从ggplot (local, aes (x = p.start, y = ratio, size = duration))删除size = duration,并将其添加到geom_point (colour = "blue")。然后,它应该工作。

ggplot(local, aes(x=p.start, y=ratio))+ 
geom_point(colour="blue", aes(size=duration))+ 
facet_wrap(~principal, nrow=2)+ 
geom_text(aes(x=xx, y=yy, label=zz), data=stats) 

enter image description here

+1

两个答案都很完美。谢谢! – Gerry