2016-12-21 29 views
1

我試圖用平滑線繪製多個數據框,使用ggplot()或stat_smooth()以png作爲背景。r多個ggplot,stat_smooth在png上

我有三個dataframes

data1 <- data.frame(Max.x, Max.y) 
data2 <- data.frame(Med.x, Med.y) 
data3 <- data.frame(Min.x, Min.y) 

和圖片(PNG)文件

mypng <- readPNG("picture.png") 

我發現,stat_smooth(跨度= 0.4),它會創造出流暢的線條,通過所有的變指向數據幀。

現在我想要繪製在mypng

我已經試過幾件事情三個線條流暢。

ggplot(data1, aes(x=Max.x, y=Max.y))+scale_x_continuous(limits = c(126,129))+scale_y_continuous(limits = c(37.5, 38.5))+ annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+stat_smooth(span=0.4) 

數據2和數據3也是如此。這繪製了一個PNG的每一行,但我無法找到一種方法讓所有三個行在同一個PNG。
此外,請注意,該圖必須設置x,y max和min b/c我的數據落在這些座標之間。

另一件事我想:

ggplot()+annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+stat_smooth(data=data1, aes(x=Max.x, y=Max.y), span=0.4)+stat_smooth(data=data2, aes(x=Med.x, y=Med.y), span=0.4)+stat_smooth(data=data3, aes(x=Min.x, y=Min.y), span=0.4)+scale_x_continuous(limits=c(126,129))+scale_y_continuous(limits=c(37.5,38.5)) 

該地塊所有三個smoothlines。然而圖片沒有顯示。

我現在卡住了......我可以在mypng上得到三個不同的地塊。我可以得到所有三個地塊,但不是mypng。 我如何獲得mypng上的所有三行?

+0

您在代碼中有一個錯字:'annotation_rater'應該是'annotation_raster'。另外,如果將三個數據幀堆疊到一個數據框中,則只需要調用一次'geom_smooth'。 – eipi10

+0

對不起。我在沒有互聯網的計算機上工作,所以我不得不在這裏手動重寫代碼.. 並且對於您的觀點..我無法合併數據幀,因爲我看到三條不同的線。如果我將它們堆疊在一起,它只會創建一個。 –

+0

是的,但是您添加另一個分組列來標記每行來自哪個數據框,並將該列映射到「組」或「顏色」審美。 @霧的答案顯示我的意思。 – eipi10

回答

5

這個怎麼樣:

library(png) 
library(ggplot2) 

data1 <- data.frame(series = rep("max",10), 
        x = rnorm(10, mean = 127.5, sd = 1), 
        y = rnorm(10, mean = 38, sd = 0.25)) 
data2 <- data.frame(series = rep("med",10), 
        x = rnorm(10, mean = 127.5, sd = 1), 
        y = rnorm(10, mean = 38, sd = 0.25)) 
data3 <- data.frame(series = rep("min",10), 
        x = rnorm(10, mean = 127.5, sd = 1), 
        y = rnorm(10, mean = 38, sd = 0.25)) 

df <- rbind(data1,data2,data3) 

mypng <- readPNG("C:/Users/lorenzr/Pictures/family.png") 

ggplot(df, aes(x=x, y=y, colour = series))+ 
    scale_x_continuous(limits = c(126,129))+ 
    scale_y_continuous(limits = c(37.5, 38.5))+ 
    annotation_raster(mypng, xmin=126, xmax=129, ymin=37.5, ymax=38.5)+ 
    stat_smooth(span=0.4) 

enter image description here

+0

這是完美的!謝謝。 –

+0

哦..和..有沒有辦法改變線的顏色? –

+0

是的,請查看scale_colour_manual。 – Mist