2017-12-13 14 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)) 

しかし、それは動作しません:それは最後の曲線をプロットします。


答えが正常に動作され、提案が、私はその後、色にラベルを追加することができないんだと、私も試してみました:

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)) 

それはというエラーを生成します。 Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 0, 2

+1

可能な複製[forループを使用して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

@Gloomy Plsは更新された答えを参照します。 – Prem

関連する問題