2012-07-31 110 views
2

我想添加标签到ggplot2图形有许多点和线使用geom_line。由于该图有太多的数据点和线性线,所以看起来非常混乱。把标签添加到ggplot2图形

我想标贴添加到线性线,从而使最终用户将definetely知道是什么行所属的服务器等

我的数据帧看起来像这样

> z 
Hostname Memory Date 
ServerA   50 2012-01-01 01:00:00 
ServerB   30 2012-01-01 01:00:00 
ServerC   30 2012-01-01 01:00:00 
ServerD   20 2012-01-01 01:00:00 
ServerE   80 2012-01-01 01:00:00 

ServerA   20 2012-01-02 01:00:00 
ServerB   10 2012-01-02 01:00:00 
ServerC   5 2012-01-02 01:00:00 
ServerD   39 2012-01-02 01:00:00 
ServerE   50 2012-01-02 01:00:00 



p <- ggplot(z, aes(x=Date, y=Memory, colour=Hostname, size=0.1)) + 
     geom_point(size=0.1) + theme_bw 

() + geom_smooth(method = "lm", se=FALSE, size = 1) + 
     theme_bw() + geom_point(size=0.2) 

我使用direct.label(p, "last.points")尝试或first.points,但它仍然不够清楚。当我做最后的点时,标签被切断。

是否可以在lm行上添加标签?

回答

0

我会改变原始脚本中的一些设置:我添加了组=主机名,并从第一行删除了大小= 0.1,在下一行中您可以自定义geom_point(我将其形状更改为x),然后你应该使用geom_smooth函数:aes(group = Hostname),最后direct.label()工作正常。

library(ggplot2) 
library(directlabels) 
myplot<-ggplot(z, aes(x=Date, y=Memory, group=Hostname, colour=Hostname))+ 
geom_point(size=3, shape=4) + 
geom_smooth(method = "lm", aes(group = Hostname), se=FALSE, size=1) 
myplot<- direct.label(myplot, "last.points") 

据我所知,对此没有预先写好的方法,你应该写自己的“定位方法”,你可以尝试这样的事情,其中​​的“坡”是LM曲线的斜率。 (你可以看到它尚未动态)

slope<-c(-30,-20, 60, 50, -40) 
label.above <- list("first.points", rot = slope, hjust = -0.5, vjust = -0.5) 
direct.label(myplot, label.above) 

其中,z是:

z<-structure(list(Hostname = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("ServerA", "ServerB", "ServerC", "ServerD", "ServerE"), class = "factor"), Memory = c(50L, 30L, 30L, 20L, 80L, 20L, 10L, 5L, 39L, 50L), Date = structure(c(2L, 2L, 2L, 2L, 2L, 3L, 3L, 1L, 3L, 3L), .Label = c("  2012-01-02 01:00:00", " 2012-01-01 01:00:00", " 2012-01-02 01:00:00"), class = "factor")), .Names = c("Hostname", "Memory", "Date"), class = "data.frame", row.names = c(NA, -10L))