2013-10-15 32 views
1

我有一個使用ggplot2三行(變量名稱,比如'A','B'和'C'在我的數據框中)的線圖。我想使用method=loess添加一個geom_smooth,但我想添加基於'B'和'C'最小值的迴歸線。有沒有辦法做到這一點?如何對不同於實際繪圖數據的數據使用geom_smooth()?

爲了說明,這裏有一個模擬代碼:

names <- c('n1', 'n2', 'n3', 'n4', 'n5') 
aline <- c(0.18, 0.21, 0.23, 0.20, 0.16) 
bline <- c(0.50, 0.40, 0.30, 0.20, 0.10) 
cline <- c(0.14, 0.20, 0.30, 0.35, 0.33) 
min_bc <- c(0.14, 0.20, 0.30, 0.20, 0.10) 
df <- data.frame(name, aline, bline, cline) 
df.m <- melt(df) 
g <- ggplot(df.m, aes(group=1, names, value, colour=variable)) 
g <- g + geom_line(aes(group=variable)) 
g <- g + geom_point(aes(colour=variable), alpha=0.4) 

我要添加使用alinemin_bc迴歸線,而無需實際繪製min_bc。一般來說,我可能有一些數據,並且我想要使用不同的線條(或點,條等)來繪製(在同一個圖表中)不同的線條(或點,條等),以及使用不同的線條數據轉換。是否有任何全面的文檔可以讓我全面瞭解如何在R/ggplot中執行此類操作?

+2

這有點令人困惑。你的意思是你想從'aline〜min_bc'(或者反過來)繪製迴歸線? – joran

+2

更改任何ggplot對象內的'data'和'aes(x = ...,y = ...)'參數。 –

回答

3

通常情況下,一個設置相關的主呼叫出圖的數據集ggplot

ggplot(data, aes()) + geom_point() 

不過,您也可以設定數據集分別爲geom

ggplot(data1, aes()) + geom_point(data = data2) 

使用此技術,您可以預先計算您想要繪製LOESS的數據集,並將其輸入到geom_smooth()。下面的例子證實了這一假設:

df1 = data.frame(x = 1:100, y = runif(100)) 
df2 = data.frame(x = 1:100, y = runif(100) + 1) 
ggplot(df1, aes(x, y)) + geom_point() + geom_smooth(data = df2) 

enter image description here

在這個例子中,兩個數據集具有相同的列名。如果不是這種情況,則還需要調整geom_smooth內的aes設置。

請記住,繪製另一個數據集的平滑度,而不是您在其下繪製的數據集的平滑度可能會使事情變得非常不清楚。

相關問題