2016-09-26 5 views
0

저는 정말 처음 접하니 R에 익숙하지 않으므로 제발 쉬워!R : ggplot2 : 겹쳐지는 점과 색을 피하십시오

이것은 내 시나리오입니다. 24 개의 메타 분석 배포판 (Dist1-Dist24)이있는 데이터 프레임이 있습니다. 각 분포에 대해, 필자는 특이 치 제거 (ES1 이전 ES7 이전)와 특이 치 제거 (ES1 이후 ES1 이후)에 대한 7 가지 추정 전에 각각의 메타 분석 평균 효과 크기에 대한 7 가지 추정치를가집니다. 따라서 배포 당 총 14 개의 포인트가있을 수 있습니다.

내가 할 수있는 것 : 아래 데이터 프레임 및 스크립트를 사용하여 각 배포에 대한 모든 예상치를 플로팅 할 수 있습니다.

내 데이터 프레임은 "|"문자로 구분되며, (파이프). 일부 셀은 의도적으로 비어 있습니다. 여기

# setwd("your path") 

# install packages 
install.packages("ggplot2") 
library(ggplot2) 
install.packages("reshape2") 
library(reshape2) 
windowsFonts(TNR = windowsFont("Times New Roman")) 

# load the data 
d1 <- read.table(file.choose(), sep=",", header=TRUE) 

# normalize the data (i.e., convert into 'long' form) 
dat1 = melt(d1, id.vars = "x") 

# Set x factor order in order that appears in data 
dat1$x = factor(dat1$x, levels = unique(dat1$x)) 

# Begin plotting 
Fig1 <- ggplot(dat1, aes(x=x, y= value))+ 
    geom_point(aes(shape = variable)) + 
    geom_line(data=dat1[!is.na(dat1$value),]) + 
    scale_shape_manual(values = 0:13) + 
    geom_hline(yintercept = 0, linetype=2) + 
    coord_flip() + 
    xlab('Distribution') + 
    ylab('Effect size') + 
    ylim(-.30, .05) 

Fig1 <- Fig1 + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(), 
      axis.line.x = element_line(colour = "black"), 
      axis.line.y = element_line(colour = "black"), 
      axis.text.x = element_text(size = 8), 
      axis.text.y = element_text(size = 8), 
      legend.position = ("bottom"), 
      legend.title=element_blank(), 
      legend.text=element_text(size=8), 
      legend.key = element_rect(colour = NA)) 

Fig1 

내가 생산할 수있는 인물이다 : 여기

|x|ES1.before|ES2.before|ES3.before|ES4.before|ES5.before|ES6.before|ES7.before|ES1.after|ES2.after|ES3.after|ES4.after|ES5.after|ES6.after|ES7.after| 
|Dist 1|-0.10|-0.1|-0.02|-0.04|-0.13|-0.03|0.00|-0.09|-0.09|-0.04|-0.06|-0.11|-0.03|-0.010| 
|Dist 2|-0.11|-0.11|-0.06|-0.07|-0.14|-0.08|-0.06|-0.09|-0.09|-0.06|-0.07|-0.11|-0.08|-0.06| 
|Dist 3|-0.12|-0.13|-0.03|-0.12|-0.15|-0.07|-0.02|-0.09|-0.09|-0.03|-0.04|-0.11|-0.04|0.00| 
|Dist 4|-0.09|-0.09|-0.03|-0.04|-0.13|-0.05|-0.01|-0.11|-0.11|-0.06|-0.08|-0.13|-0.06|-0.05| 
|Dist 5|-0.17|-0.17|-0.13|-0.13|-0.19|-0.11|-0.13|-0.16|-0.16|-0.13|-0.12|-0.18|-0.11|-0.13| 
|Dist 6|-0.10|-0.10|-0.03|-0.04|-0.13|-0.04|-0.02|-0.08|-0.08|-0.04|-0.04|-0.10|-0.03|-0.02| 
|Dist 7|-0.07|-0.07|-0.02|-0.02|-0.09|-0.06|-0.01|-0.08|-0.08|-0.03|-0.07|-0.09|-0.10|-0.01| 
|Dist 8|-0.04|-0.05|0.00|-0.04|-0.09|-0.01|-0.01|-0.03|-0.03|-0.01|-0.01|-0.06|-0.01|0.00| 
|Dist 9|-0.15|-0.15|-0.08|-0.11|-0.17|-0.08|-0.05|-0.12|-0.12|-0.08|-0.11|-0.14|-0.08|-0.07| 
|Dist 10|-0.09|-0.09|-0.03|-0.05|-0.12|-0.03|0.00|-0.08|-0.09|-0.02|-0.05|-0.10|-0.03|0.00| 
|Dist 11|-0.12|-0.09|-0.02|-0.02|-0.14|0|0.01|-0.12|-0.12|-0.07|-0.07|-0.13|-0.09|0.08| 
|Dist 12|-0.07|-0.07|-0.02|-0.02|-0.11|-0.02|-0.01| 
|Dist 13|-0.09|-0.09|-0.03|-0.05|-0.13|-0.03|-0.01|-0.07|-0.07|-0.03|-0.04|-0.09|-0.01|-0.01| 
|Dist 14|-0.1|-0.09|-0.04|-0.06|-0.12|-0.05|-0.01|-0.12|-0.12|-0.05|-0.12|-0.14|-0.09|0.01| 
|Dist 15|-0.05|-0.05|-0.04|-0.04|-0.04|-0.04|-0.03| 
|Dist 16|-0.17|-0.17|-0.07|-0.11|-0.20|-0.09|-0.03|-0.16|-0.16|-0.07|-0.11|-0.18|-0.09|-0.07| 
|Dist 17|-0.18|-0.18|-0.06|-0.18|-0.23|-0.09|-0.11|      
|Dist 18|-0.23|-0.23|-0.05|-0.21|-0.26|-0.15|0.01|-0.11|-0.10|-0.04|-0.11|-0.12|-0.09|0.02| 
|Dist 19|-0.07|-0.07|-0.02|-0.02|-0.12|-0.05|-0.01|-0.06|-0.06|-0.03|-0.03|-0.07|-0.02|0.00| 
|Dist 20|-0.10|-0.10|-0.04|-0.07|-0.13|-0.06|-0.02|-0.10|-0.10|-0.04|-0.08|-0.12|-0.06|-0.02| 
|Dist 21|-0.10|-0.10|-0.03|-0.05|-0.13|-0.04|-0.01|-0.09|-0.09|-0.05|-0.07|-0.11|-0.06|-0.05| 
|Dist 22|-0.15|-0.15|-0.15|-0.15|-0.19|-0.04|-0.11| 
|Dist 23|-0.11|-0.11|-0.05|-0.06|-0.14|-0.03|0.03| 
|Dist 24|-0.10|-0.10|-0.04|-0.06|-0.16|-0.03|-0.05|-0.10|-0.10|-0.06|-0.07|-0.13|-0.04|-0.05| 

내 코드입니다

Distribution of effect sizes

참고 (1) dataframe, (2) 구문, (3) 플롯은 a에서 찾을 수 있습니다 Dropbox folder here

두 가지 질문이 있습니다. s :

(1) ES1.before와 ES1.after (등등)는 같은 모양을 공유하지만 색상이 다를 수 있습니까? 예를 들어, 파란색 모양과 ES1.before로 ES1.before을 가질 수있는 방법이 있습니까? 빨간색 모양으로, ES2.before와 ES2.after는 각각 다른 파란색과 빨간색 모양으로 나타 납니까?

(2) 현재 효과 크기 값이 동일하면 모양이 겹칩니다. 효과 크기 값이 같을 때 모양을 서로 쌓을 수있는 방법이 있습니까? 나는 '닷지'와 '지터'기능을 광범위하게 사용했지만 해결책을 찾지 못했습니다.

나를 도울 용의가있는 사람에게 감사드립니다. 불분명 한 점이 있으면 사과드립니다. 나는 명확하지 않은 것을 명확하게 밝혀 내게되어 기쁠 것이다.

+2

환영 SO,'dput은 (your_df)는'당신보다 도움이되는 시간을내어 매우 재현성에 대한 모든의 – Nate

답변

0

이 기능이 작동합니까? ggplot에서 색상 또는 모양을 지정하려면 변수 data_frame을 플로팅 할 때 serperate 열을 사용하여 미학을 조정하려는 변수를 만드는 것이 가장 좋습니다. 그래서 방금 전에/after를 자신의 열로 이동하여 변수에서 제거했습니다.

library(dplyr) 
library(magrittr) 
library(ggbeeswarm) 
dat1 %<>% mutate(time = gsub(".*\\.", "", variable), 
      variable = gsub("\\..*", "", variable)) 

# Begin plotting 
Fig1 <- ggplot(dat1, aes(x=x, y= value, colour = time, group = variable))+ 
    geom_point(aes(shape = variable), position = position_quasirandom()) + 
    geom_line(data=dat1[!is.na(dat1$value),], aes(colour = NULL, group = NULL)) + 
    scale_shape_manual(values = 0:13) + 
    geom_hline(yintercept = 0, linetype=2) + 
    coord_flip() + 
    xlab('Distribution') + 
    ylab('Effect size') + 
    ylim(-.30, .05) 

Fig1 <- Fig1 + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(), 
      axis.line.x = element_line(colour = "black"), 
      axis.line.y = element_line(colour = "black"), 
      axis.text.x = element_text(size = 8), 
      axis.text.y = element_text(size = 8), 
      legend.position = ("bottom"), 
      legend.title=element_blank(), 
      legend.text=element_text(size=8), 
      legend.key = element_rect(colour = NA)) 

Fig1 

enter image description here

# Bonus: Instead of setting all of those theme parameters each time try theme_set 
# if you call this at the start of your script all of your plots will inherit these attributes 
# these are just what I use regularly 
theme_set(theme_light() + theme(axis.title = element_text(size = rel(1.5)), 
          axis.text = element_text(size = rel(1.5)), 
          plot.title = element_text(size = rel(2)), 
          strip.text = element_text(size = rel(1.5)), 
          legend.title = element_text(size = rel(1.5), face = "bold"), 
          legend.text = element_text(size = rel(1.5)), 
          axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = .5))) 
+0

먼저 귀하의 예제 데이터를 추가하는 가장 쉬운 방법입니다하기 나 밖으로. 당신이 제작 한 것을 복제하려고합니다. 그러나 '돌연변이'를 시도 할 때 상황이 무너지고 있습니다. 특히, "오류 : 함수"% <> % "을 (를) 찾을 수 없습니다 - 이에 대한 제안이 있습니까? –

+0

오류가 무엇입니까? 아마도'library (dplyr); library (magrittr)'대답, 그들은 mutate' 호출에 사용됩니다 – Nate

+0

굉장 - 고마워요! 그걸 해봅시다 :) –