2017-03-02 5 views
0

yylabの4つのプロットを作成する必要があります。 Iはすべて、単一のプロットはxy VS値と行番号との散布図であるべきであるR:ggplot2とloop with data.table

set.seed(123) 
dt <- data.table(a = rnorm(20), 
       b = rnorm(20), 
       c = rnorm(20), 
       d = rnorm(20), 
       e = rnorm(20)) 

あるdata.tabledtから始まります。また、私はこのプロットは、列acddteのために繰り返さなければならないh = c(0, -2, 2, -3, 3)

median(y) + h*mad(y)でいくつかのhlineをプロットしたいです。

私はコード

# Defining y labels # 
ylabels <- c(bquote(phantom(.)^100*A~"/"*phantom(.)^200*A), 
      bquote(phantom(.)^101*C~"/"*phantom(.)^201*B), 
      bquote(phantom(.)^102*D~"/"*phantom(.)^202*D), 
      bquote(phantom(.)^103*E~"/"*phantom(.)^202*E)) 

# Selecting columns of dt  
ydata <- names(dt)[c(1, 3, 4, 5)] 


h <- c(0, -2, 2, -3, 3) 
hcol <- c("#009E73", "#E69F00", "#E69F00", "red", "red") 

# The for cycle should create the 4 plots and assign them to a list 
plots <- list() 
for (i in seq_along(ydata)) { 

    p1 <- ggplot(dt, aes_string(x = seq(1, dt[, .N]), y = ydata[i])) + 
        geom_point() + 
        geom_hline(aes_string(yintercept = median(ydata[i]) + 
             h * mad(ydata[i])), color = hcol) + 
        xlab("Replicate") + 
        ylab(ylabels[i]) + 
        scale_x_continuous(breaks = seq(1, dt[,.N]))) 

    plots[[i]] <- p1 # add each plot into plot list 
    } 

その後plotsCookbook for Rからmultiplot機能に供給され、このビットを思い付きました。

ただし、私のloopは、中央値とマッド値を計算できないため、正しく機能しません。 コードを動作させるための提案はありますか?

答えて

0
# data.table with the median +- h* mad values 
hline.values <- dt[, lapply(.SD, function(x) median(x) + h * mad(x)), 
        .SDcols = ydata] 

# new empty list 
plots <- list() 

for (i in seq_along(ydata)) { 

     p1 <- ggplot(dt, aes_string(x = seq(1, dt[, .N]), y = ydata[i])) + 
      geom_point() + 
      geom_hline(data = hline.values, 
         aes_string(yintercept = ydata[i])) + 
      # Axis labels and theme 
      xlab("Replicate") + 
      ylab(ylabels[[i]]) + 
      scale_x_continuous(breaks = seq(1, dt[, .N])) 

     plots[[i]] <- p1 
}