2012-07-31 134 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))