2016-12-21 2 views
1

Я пытаюсь построить несколько фреймов данных с плавной линией, используя ggplot() или stat_smooth() с png в качестве фона.r plot multiple ggplot, stat_smooth on 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

Да, но вы добавляете еще один столбец группировки, который отмечает, к какому кадру данных относятся каждая строка, и вы сопоставляете этот столбец с эстетикой «group» или «colour». @ Ответ Миста показывает, что я имею в виду. – 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

Смежные вопросы