2013-09-26 179 views
1

The solution with ggplotthis question對我的數據非常有效。然而,我試圖添加一個傳說,我試過的一切都不起作用...在同一圖中繪製兩張圖

例如,在上述問題的ggplot示例中,如何添加圖例以顯示紅色曲線是相關的到「海洋」,綠色曲線與「土壤」有關?是的,我想添加我將要定義的文本,並且它與我的data.frame中的任何其他變量都沒有關係。

下面的例子是我自己的一些資料...

Rate  Probability  Stats 
1.0e-04 1e-04   891.15 
1.0e-05 1e-04   690 
... 

等(這是大約400行)。我有兩個類似於上面的數據框。 所以我的代碼是

g <- ggplot(Master1MY, aes(Probability)) 
g <- g + geom_point(aes(y=Master1MY$Stats), colour="red", size=1) 
g <- g + geom_point(aes(y=Transposon1MY$Stats), colour="blue", size=1) 
g + labs(title= "10,000bp and 1MY", x = "Probability", y = "Stats") 

情節看起來像this

我只想要一個紅色和藍色的傳奇說「大師」和「轉座子」

謝謝!

回答

4

ggplot通常最方便的是保持數據爲'長'格式。在這裏,我使用reshape2包中的函數melt將數據從寬轉換爲長格式。根據您指定的不同 thetics(大小,形狀,顏色等)的不同,會出現相應的圖例。

library(ggplot2) 
library(reshape2) 

# data from the example you were referring to, in a 'wide' format. 
x <- seq(-2, 2, 0.05) 
ocean <- pnorm(x) 
soil <- pnorm(x, 1, 1) 
df <- data.frame(x, ocean, soil) 

# melt the data to a long format 
df2 <- melt(data = df, id.vars = "x") 

# plot, using the aesthetics argument 'colour' 
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line() 

enter image description here

編輯,設置名稱和傳奇的標籤

# Manually set name of the colour scale and labels for the different colours 
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + 
geom_line() + 
scale_colour_discrete(name = "Type of sample", labels = c("Sea water", "Soil")) 

EDIT 2,下列新的樣本數據 轉換數據,假設其從您的更新組織,以長格式。再次,我相信如果您將數據保存爲長格式,則可以讓您的生活更輕鬆。我將每一步都與我在第一個答案中使用的簡單示例數據相關聯。請注意,有許多替代方法可以重新排列數據。基於您在更新中提供的數據中的小部分(不可重現)部分,這是一種方法。

# x <- seq(-2, 2, 0.05) 
# Master1MY$Probability 
Probability <- 1:100 

# ocean <- pnorm(x) 
# Master1MY$Stats 
Master1MY <- rnorm(100, mean = 600, sd = 20) 

# soil <- pnorm(x,1,1) 
# Transposon1MY$Stats 
Transposon1MY <- rnorm(100, mean = 100, sd = 10) 

# df <- data.frame(x, ocean, soil) 
df <- data.frame(Probability, Master1MY, Transposon1MY) 

# df2 <- melt(df, id.var = "x") 
df2 <- melt(df, id.var = "Probability") 

# default 
ggplot(data = df2, aes(x = Probability, y = value, col = variable)) + 
    geom_point() 

# change legend name and labels, see previous edit using 'scale_colour_discrete' 

# set manual colours scale using 'scale_colour_manual'. 

ggplot(data = df2, aes(x = Probability, y = value, col = variable)) + 
    geom_point() + 
    scale_colour_manual(values = c("red","blue"), name = "Type of sample", labels = c("Master", "Transposon")) 

enter image description here

+1

這可能是值得加入這個例子在上面鏈接,以及問題的答案ggplot。對於有12個upvotes的答案,這不是'ggplot'代碼的一個很好的例子。 – joran

+0

好點。 @Fabs有點不幸絆倒了一個大範圍的例子。 – Henrik

+0

謝謝!但我認爲現在這個例子不適合我...(或者我不明白這個例子,並且對此感到抱歉)......我將編輯我的問題並展示我的例子的一部分......也許有一個簡單的方法來做我想做的事情....再次感謝! – Fabs

相關問題