2015-07-23 2 views
0

Я хочу создать участок в ggplot для участка коробки и линейного участка на том же рисунке. У меня есть кадр данных, который выглядит следующим образом:построение прямоугольника и линейного графика в том же графе с использованием ggplot

Lambda | means | theorMean 
1 0.1  10.07989  10  
2 0.1  10.55681  10  
3 0.1  10.26660  10 
4 0.1  10.29234  10  
5 0.1  10.07754  10  
... 

means является выборочными средними и теоретическими средства theorMeans. Я хочу построить распределение средств выборки по квадратным графикам, тогда как теоретические средства используют прямую линию.

Это то, что я до сих пор ...

library(ggplot2) 
library(scales) 

p <- ggplot(summ, aes(x=factor(Lambda), y=means)) + 
    geom_boxplot() + 
    geom_line(data=summ, aes(x=log10(Lambda), y=means)) 

enter image description here

Проблема заключается в том, что для коробки сюжета или скрипки сюжета, мне нужно использовать ось х как фактор , С другой стороны, мне нужно, чтобы ось x была числом. Я в основном хочу подгонять теоретическую линию к ящикам, которые я создаю. Как я могу это сделать?

+0

Я не уверен, если я неправильно понимаю, но если проблема только в классе лямбда, вы можете просто удалить «aes (x = factor (Lambda), y = означает)' из 'ggplot()' и поместить его внутри 'geom_boxplot()'. Кроме того, вы можете использовать 'inherit.aes = FALSE' для блокировки наследования' aes' в 'geom_line'. Пожалуйста, дайте мне знать, если я что-то неправильно истолковал. – lnNoam

+0

Умм, я хочу выровнять два сюжета. На самом деле мне даже не нужен «термометр» в data.frame. Я могу просто построить ('lambda' против' 1/lambda'). Его просто то, что «лямбда» изначально масштабируется. Поэтому я не могу выровнять факторы, которые не привязаны к строке. Я попробовал ваше предложение 'ggplot (summ) + geom_boxplot (aes (x = factor (Lambda), y = mean)) + geom_line (aes (x = Lambda, y = означает))', и это не помогает. Спасибо за ваше предложение! – ssm

ответ

0

Это должно сделать трюк:

library(ggplot2) 

summ$Lambda <- log10(summ$Lambda) 

ggplot(summ, aes(x=factor(Lambda), y=means)) + 
    geom_boxplot() + 
    geom_line(inheret.aes = FALSE, aes(x=factor(Lambda), y=means, group = 1), color = "blue") + 
    ylab("Mean") + 
    xlab("Lambda (Log10)") + 
    scale_x_discrete(labels = round(summ$Lambda,2)) + 
    theme( axis.ticks.y = element_blank() 
     , axis.text.x = element_text(angle = 45, hjust = 1) 
) 

Yeilds:

enter image description here


теста данные:

e <- 2.7182818284590452353602874713527 
summ <- data.frame("Lambda" = seq(0.01, 0.9, by = 0.0287097)) 

list <- c() 
for(x in 1:31){ 
    t <- e^-(x/10)*15 
    list[x] <- t 
} 
summ$means <- list 
summ$Lambda <- log10(summ$Lambda) 

This was helpful here.

+1

Большое спасибо. Я на самом деле использовал вашу идею группы и сделал это: ' theoriticalMeans <- 1/лямбды theorMeans = data.frame (Lambda = лямбды, означает = theoriticalMeans) р <- ggplot() + geom_line (данные = theorMeans, aes (x = log10 (Lambda), y = означает), color = "red", size = 1.5) + geom_boxplot (data = summ, aes (x = log10 (Lambda), y = средство, группа = Lambda)) ' – ssm

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