2016-08-17 22 views
0

這是一個增量的問題直接涉及到這個話題:通過與ggplot和modyfing geom_hline(y截距)相應列循環

How do I loop through column names and make a ggplot scatteplot for each one

我想通過列名循環和作,ggplot scatteplot每一個,但我想添加一個水平線,其攔截取決於列中的值。

所以我把代碼:

Y <- rnorm(100) 
df <- data.frame(A = rnorm(100), B = runif(100), C = rlnorm(100), 
       Y = Y) 
colNames <- names(df)[1:3] 
for(i in colNames){ 
    plt <- ggplot(df, aes_string(x=i, y = Y)) + 
    geom_point(color="#B20000", size=4, alpha=0.5) + 
    geom_hline(yintercept=0, size=0.06, color="black") + 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black") 
    print(plt) 
    Sys.sleep(2) 
} 

我切換y隨x的

aes_string(x=Y, y = i)) 

,我想修改該行

geom_hline(yintercept=0, size=0.06, color="black") 

...使y截距不是恆定的,而是取決於我,例如: :

geom_hline(yintercept=c(quantile(i, 0.25))) 

因此,yintercept總是列中的第一個四分位數。

然而,它不工作:

錯誤(1 - H)*適量[I]: 非數字參數二元運算

我嘗試不同的選項,如aes_string,糊劑()等 但沒有一個工作。

然而,它不工作:錯誤(1 - H)*適量[I]: 非數字參數二元運算

我嘗試不同的選項,如aes_string,糊劑()等 但沒有這工作。

+0

嘗試'位數(DF [我],0.25)' – hrbrmstr

回答

0

你應該叫quantile(df[,i], 0.25),而不是quantile(i, 0.25),它應該工作,你的代碼將是:

for(i in colNames){ 
    plt <- ggplot(df, aes_string(x=Y, y = i)) + 
    geom_point(color="#B20000", size=4, alpha=0.5) + 
    geom_hline(yintercept=c(quantile(df[,i], 0.25)))+ 
    geom_smooth(method=lm, alpha=0.25, color="black", fill="black") 
    print(plt) 
    Sys.sleep(2) 
} 
+0

如果你想。減去1.5這個值IQR(然後計算1.5 * IQR-q25),您的公式應該是c(1.5 * IQR(df [,i]) - quantile(df [,i],0.25))''。在你的代碼中,你做的是相反的,你忘了括號:quantile(df [,i],0.25 **)** - 1.5 * IQR(df [,i]) – Arault