2017-12-13 8 views
2

I가 다음 스크립트 :다른 매개 변수 값에 대한 분포를 플로팅하려면 어떻게해야합니까?

graph of log-normal distribution

: 로그 - 정규 분포가 매개 변수의 다른 값과 같은 방법의 다음 그래프 (마이너스 제목)를 생산

library(ggplot2) 

values <- c(0.1,0.15,0.2,0.3,0.5,1,1.5,2,2.5) 
colours <- palette()[1:length(values)]; 


p <- ggplot(data.frame(x=c(0, 2)), aes(x)) + 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 0.1),aes(colour="0.1"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 0.15),aes(colour="0.15"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 0.2),aes(colour="0.2"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 0.3),aes(colour="0.3"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 0.5),aes(colour="0.5"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 1),aes(colour="1"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 1.5),aes(colour="1.5"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 2),aes(colour="2"))+ 
    stat_function(fun= function(x) dlnorm(x,mean = 0, sd = 2.5),aes(colour="2.5"))+ 
    scale_colour_manual("Sigma:", values=colours, breaks=as.character(values)) 

p 

복사 한 붙여 넣기 된 줄을 눈에 더 편한 것으로 대체하려면 어떻게해야합니까?

뭔가

stat_function(fun= function(x) dlnorm(x,mean = 0, sd = values),aes(colour=as.character(values))) 같은 편집 : 중복으로 제안 된 질문과는 달리, 나는 기능이 아닌 데이터를 처리하고있어, 그래서 나는이 제안


을 적용하는 방법을 잘 모르겠어요 나는 for-loop에서 다음과 같이 시도했다.

library(ggplot2) 

values <- c(0.1,0.15,0.2,0.3,0.5,1,1.5,2,2.5) 
colours <- palette()[1:length(values)]; 


p <- ggplot(data.frame(x=c(0, 2)), aes(x)) + 
    ggtitle(expression(paste("Log-normaal distributie met verschillende waarden van ", sigma)))+ 
    ylab(expression(paste(f[X](x)))) 


for(i in 1:length(values)){ 
    p <- p + stat_function(fun= function(x) dlnorm(x,mean = 0, sd = values[i]), aes(colour=as.character(values[i]))) 
} 


p + scale_colour_manual("Sigma:", values=colours, breaks=as.character(values)) 

그러나 작동하지 않는다 : 마지막 커브 만 그려 준다.


나는 또한 대답은 잘 작동하는 제안으로했지만, 나는 색상 레이블을 추가 할 다음 드릴 수 없습니다 : Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 0, 2

:

ggplot(data.frame(x=c(0, 2)), aes(x)) + 
    mapply(function(col, mean, sd) { 
    stat_function(fun = dlnorm, args = list(mean = mean, sd = sd), aes(colour=col))}, 
    mean = 0, sd = values, col = as.character(values)) + 
    scale_colour_manual("Sigma:", values=colours, breaks=as.character(values)) 

그것은 말하는 오류가 발생합니다

+1

가능한 복제 [A에 대한 루프를 사용하여 ggplot에 레이어를 추가하는 방법 ] (https://stackoverflow.com/questions/15987367/how-to-add-layers-in-ggplot-using-a-for-loop) – LAP

+0

@LAP : 그 질문을 보았지만 제대로 작동하지 못했습니다. . 나는 데이터가 없다. 그러나 오히려 연속적인 곡선이 함수로부터 도출된다 ... – Gloomy

답변

3

희망이 도움이됩니다!

library(ggplot2) 

values <- c(0.1, 0.15, 0.2, 0.3, 0.5, 1, 1.5, 2, 2.5) 
colours <- c(palette(), "orange"); 

ggplot(data.frame(x=c(0, 2)), aes(x)) + 
    mapply(function(col, mean, sd) { 
    stat_function(fun = dlnorm, args = list(mean = mean, sd = sd), colour = col)}, 
    mean = 0, sd = values, col = colours) 

편집 업데이트 : 당신이 stat_function 색상 범례를 갖고 싶어
은 다음 for 루프 또는 mapply에 넣어보다는 그것을 여러 번 반복 해야 할 것 같습니다.


그냥 경우에 당신은 당신이 코드의 덩어리 아래에 시도 할 수 있습니다 다른 솔루션에 관심이 :

library(dplyr) 
library(ggplot2) 

df <- data.frame(mean = rep(0,9), 
       sd = c(0.1, 0.15, 0.2, 0.3, 0.5, 1, 1.5, 2, 2.5)) 
colours <- c(palette(), "orange"); 

x <- seq(0,2,0.01) 
my_func <- mdply(df, function(mean,sd){ 
    data.frame(x=x, y=dlnorm(x,mean, sd), sigma=as.character(sd))}) %>% 
    bind_rows 

ggplot(my_func, aes(x=x, y=y, colour=sigma)) + 
    geom_line() + 
    scale_colour_manual(values=colours) + 
    theme_bw() 

Output plot

+0

색깔을위한 라벨을 추가하려고하면 그게 도움이된다. (편집 된 질문 참조) – Gloomy

+0

@Gluomy Pls는 업데이트 된 답변을 참조한다. – Prem