2016-09-06 38 views
0

我有這個數據框叫mydf。我試圖繪製如下所示的這些數據,但我只想標註那些污染超過1.2的樣本(而不是所有東西)。我還想在1.2污染邊界添加一條水平線。我如何在R中做到這一點?如何在ggplot中添加條件標籤樣本

mydf <- structure(list(sample.names = structure(c(2L, 3L, 4L, 5L, 6L, 
    1L, 7L, 8L, 9L, 10L), .Label = c("LPH-001-1", "LPH-001-10", "LPH-001-10_AK1", 
    "LPH-001-10_AK2", "LPH-001-10_PD", "LPH-001-10_SCC", "LPH-001-13", 
    "LPH-001-13_AK1", "LPH-001-13_AK2", "LPH-001-13_PD"), class = "factor"), 
     contamination = structure(c(5L, 1L, 4L, 2L, 2L, 4L, 3L, 8L, 
     7L, 6L), .Label = c("0.7", "1.0", "1.1", "1.2", "1.3", "1.4", 
     "1.7", "2.0"), class = "factor")), .Names = c("sample.names", 
    "contamination"), row.names = c(NA, -10L), class = "data.frame") 

cc<- ggplot(mydf, aes(x=sample.names, y=contamination, label= mydf[,"sample.names"])) + geom_point() 

     cc + geom_text() 
+0

清理繪圖前的數據,爲什麼數字存儲爲因子? – zx8754

回答

2

我會分別轉換sample.namescontamination字符和數字載體,然後做出名的新載體,其具有與contamination <= 1.2樣品的佔位符。 geom_hline可以添加水平線。

mydf$contamination <- as.numeric(as.character(mydf$contamination)) 
mydf$sample.names <- as.character(mydf$sample.names) 
mydf$sample.names1.2 <- ifelse(mydf$contamination > 1.2, mydf$sample.names, "") 

ggplot(mydf, aes(x=sample.names, y=contamination, label = sample.names1.2)) + 
    geom_point() + 
    geom_text() + 
    geom_hline(yintercept = 1.2)