2014-12-11 7 views
0

ggplot2를 사용하여 두 개의 분리 된 산점도를 만들었으므로 하나의 플롯으로 결합해야합니다. 각 플롯은 3 가지 다른 치료법 (배경)하에있는 도마뱀 개체군을위한 것입니다.두 개의 플롯을 하나로 합치고 각각을 별도의 범례로 R

csMS = data.frame() 
ellMS = data.frame() 
centroidsMS = data.frame() 

csplotMS = ggplot(csMS, aes(x = RG, y = GB, colour = Background)) + geom_point(size = 3, shape = 17) + #colour by background, circles size 3 
    geom_path(data = ell.AS, aes(x = RG, y = GB ,colour = Background), size = 1, linetype = 2) + #adding the ellipses 
    geom_point(data = centroidsMS, size = 3, shape = 17) + #added centroids  
    geom_errorbar(data = centroidsMS, aes(ymin = GB - se.GB, ymax = GB + se.GB), width = 0) + #add y error bars 
    geom_errorbarh(data = centroidsMS, aes(xmin = RG - se.RG, xmax = RG + se.RG), height = 0) + 
    theme_bw() + #white background 
    theme(axis.title.y = element_text(vjust = 2), axis.title.x = element_text(vjust = -0.3)) + #distance of axis titles from axis 
    theme(panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), #no grids 
     axis.line = element_line(colour = "black")) + #black axes 
    theme(text = element_text(size = 30)) + #font size 
    ylab("(G-B)/(G+B)") + xlab("(R-G)/(R+G)") + # Set text for axes labels 
    scale_colour_manual(values = c("black","#FF6600", "yellow1")) + #changed default colours 
    labs(colour = "Murray Sunset NP") + 
    theme(legend.title = element_text(size = "20")) + #changes the legend title 
    theme(legend.text = element_text(size = "20")) + #changes the legend title 
    theme(legend.key = element_blank()) + #removed little squares around legend symbols 
    theme(legend.direction = "horizontal", legend.position = c(.5, .85)) 

내가

csASMS = csplotAS + csplotMS 

을 시도하지만 오류 메시지가 얻을 : "P + O 오류 : 또한 이항 연산자에 숫자가 아닌 인수를 : 나는 다음이 각각의 플롯에 대한 경고 메시지 : 호환되지 않는 방법 ("+ .gg", "Ops.data.frame")에 대한 "+" "

는 또한

csASMS = grid.arrange(csplotAS, csplotMS) 
,536,913,632 시도 10

하지만 이것은 하나의 그림을 다른 그림의 위에 놓는 것이지만 두 그림을 기본적으로 단 하나의 그림으로 만들 필요가 있지만 각 그림마다 서로 다른 도마뱀 개체 수를 나타내는 두 개의 별개 전설이 있습니다.

도움이 될 것입니다.

**** 편집 **** 년 12 월 2,014분의 12

내가 하나에 두 개의 플롯을 결합하는 관리 여전히 별도의 전설의 문제가있다. 문제를 단순화하기 위해 노력하고 cdeterman의 요청에 따라 좀 샘플 데이터로 코드의 간단한 양식을 추가 해요 :

:
data frames: p1 and p2 

> p1 
    treatment x y 
1  Black 1 1 
2 Orange 2 2 
3 Yellow 3 3 

> p2 
    treatment x y 
1 Black 4 4 
2 Orange 5 5 
3 Yellow 6 6 

나는 두 데이터 프레임을 포함하는 음모를 만들기 위해 다음 코드를 사용
plot = ggplot(p1, aes(x = x, y = y, colour = treatment)) +  geom_point(size = 3) + #colour by background, circles size 3 
    theme_bw() + #white background 
    theme(axis.title.y = element_text(vjust = 2), axis.title.x = element_text(vjust = -0.3)) + #distance of axis titles from axis 
    theme(panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), #no grids 
    axis.line = element_line(colour = "black")) + #black axes 
    theme(text = element_text(size = 30)) + #font size 
    scale_colour_manual(values = c("black","#FF6600", "yellow1")) + #changed default colours 
    labs(colour = "p1") + 
    theme(legend.title = element_text(size = "20")) + #changes the legend title 
    theme(legend.text = element_text(size = "20")) + #changes the  legend title 
    theme(legend.key = element_blank()) + #removed little squares around legend symbols 
    theme(legend.direction = "horizontal", legend.position = c(.33, 1)) + 

    # Now to add the second plot/ No need to code for axis titles, titles positions,etc b/c it's already coded in the first plot 
    geom_point(data = p2, aes(x = x, y = y, colour = treatment), size = 3, shape = 17) 

이 기호는 서로 다른 기호 (p1의 경우 원, p2의 경우 삼각형)로 표시되지만 삼각형이 원 위에 겹쳐져있는 하나의 결합 된 범례 만있는 그래프를 생성합니다. 각 데이터 프레임 당 하나씩 2 개의 별도 범례를 얻으려면 어떻게해야합니까?

감사합니다.

+0

일반적으로 데이터 세트를 'ggplot'과 결합하여 한 번 호출 할 수 있습니다. [이 질문 [http : //stackoverflow.com/questions/21192002/how-to-combine-2-plots-ggplot-into-one-plot) 답을 읽고 마음에 들지 않으면 질문을 업데이트하십시오. – cdeterman

+0

안녕하세요, 저는 당신이 제안한 질문을 보았습니다. 그러나 그것은 기본적으로 제가 시도한 것과 동일한 해결책이었고 작동하지 않았습니다. 원래의 질문에서 설명한 오류 메시지를 반환했습니다. 또한이 방법이 효과가 있더라도 하나의 단일 범례를 제공하고 제 질문에서 설명한대로 두 개의 별도 전설이 필요합니다. – user3713629

+0

몇 가지 대표적인 데이터를 제공 할 수있는 방법이 있습니까? – cdeterman

답변

1

일부 연구를 수행하고 다른 일을 시도한 후에 내 문제의 일부를 해결할 수있었습니다.

csplotASMS = ggplot(csAS, aes(x = RG, y = GB, colour = Background)) + geom_point(size = 3) + #colour by background, circles size 3 
    geom_path(data = ell.AS, aes(x = RG, y = GB ,colour = Background), size = 1, linetype = 1) + #adding the ellipses 
    geom_point(data = centroidsAS, size = 4) + #added centroids  
    geom_errorbar(data = centroidsAS, aes(ymin = GB - se.GB, ymax = GB + se.GB), width = 0) + #add y error bars 
    geom_errorbarh(data = centroidsAS, aes(xmin = RG - se.RG, xmax = RG + se.RG), height = 0) + 
    theme_bw() + #white background 
    theme(axis.title.y = element_text(vjust = 2), axis.title.x = element_text(vjust = -0.3)) + #distance of axis titles from axis 
    theme(panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), #no grids 
    axis.line = element_line(colour = "black")) + #black axes 
    theme(text = element_text(size = 30)) + #font size 
    ylab("(G-B)/(G+B)") + xlab("(R-G)/(R+G)") + # Set text for axes labels 
    scale_colour_manual(values = c("black","#FF6600", "yellow1")) + #changed default colours 
    labs(colour = "Alice Springs") + 
    theme(legend.title = element_text(size = "20")) + #changes the legend title 
    theme(legend.text = element_text(size = "20")) + #changes the legend title 
    theme(legend.key = element_blank()) + #removed little squares around legend symbols 
    theme(legend.direction = "horizontal", legend.position = c(.33, 1)) + 

    # Now to add the second plot/ No need to code for axis titles, titles positions,etc b/c it's already coded in the first plot 
    geom_point(data = csMS, aes(x = RG, y = GB, colour = Background), size = 3, shape = 17) + 
    geom_path(data = ell.MS, aes(x = RG, y = GB ,colour = Background), size = 1, linetype = 2) + #adding the ellipses 
    geom_point(data = centroidsMS, size = 4, shape = 17) + #added centroids  
    geom_errorbar(data = centroidsMS, aes(ymin = GB - se.GB, ymax = GB + se.GB), width = 0) + #add y error bars 
    geom_errorbarh(data = centroidsMS, aes(xmin = RG - se.RG, xmax = RG + se.RG), height = 0) #add x error bars 

및 그래프에 대한 산점도를 묘사 : 두 개의 플롯을 추가하려면 함께 한 첫 플로터 및

geom.point() 

내 새로운 코드를 사용하여 첫 번째 위에 다른 하나가 될 필요는 다음과 같습니다 두 집단, 각각 세 가지 치료법이 있습니다. 두 집단에 대한 표현이 동일하기 때문에 동일한 색상을 사용하지만 인구의 차이를 나타내는 다른 기호를 사용하고 싶습니다. 한 모집단은 원이고 다른 모집단은 삼각형입니다.

지금 내가 대답 할 수없는 부분은 두 개의 별도 범례, 각 "줄거리"당 하나씩있는 방법입니다. 즉 하나는 원, 하나는 삼각형입니다. 순간에 "원에 삼각형이 겹쳐진 결합 된 전설이 있습니다. 각 전설에는 고유 한 제목이 있어야합니다."