2013-02-06 2 views
1

범례 상자에서 키 레이블을 어떻게 바꿀 수 있는지 궁금합니다. 이것은 데이터 프레임의 샘플입니다 나는 scale_fill_discrete를 사용하려고 "Inactivo"세계에서 단어 "Activo"그 값 2 값 1을 교체 필요하지만, 그것은ggplot2에서 범례의 키 레이블 값을 수동으로 변경하는 방법은 무엇입니까?

작동하지 않습니다

structure(list(ZPIE = c(4109L, 4463L, 4624L, 4267L, 4569L, 4656L, 
3976L, 4136L, 4139L, 4694L, 4354L, 4615L, 4183L, 4113L, 4508L, 
4035L, 4443L, 4709L, 4575L, 4363L), ecd = c(0.0873015873015873, 
0.779220779220779, 0.916666666666667, 0.396825396825397, 0.876984126984127, 
0.961038961038961, 0.0649350649350649, 0.134920634920635, 0.285714285714286, 
0.948412698412698, 0.55952380952381, 0.904761904761905, 0.337662337662338, 
0.233766233766234, 0.785714285714286, 0.0198412698412698, 0.698412698412698, 
0.956349206349206, 0.884920634920635, 0.579365079365079), ACTIVIDAD = structure(c(1L, 
2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("1", "2"), class = "factor")), .Names = c("ZPIE", 
"ecd", "ACTIVIDAD"), row.names = c(166L, 258L, 202L, 158L, 207L, 
319L, 288L, 98L, 329L, 46L, 15L, 1L, 277L, 272L, 92L, 33L, 23L, 
201L, 194L, 197L), class = "data.frame") 

나는 음모 얻기 위해 쓴이 코드 : 여기

a <- ggplot(intactos,aes(x = ZPIE, y = ecd))+ 
    geom_line(aes(group = ACTIVIDAD,colour = ACTIVIDAD,linetype=ACTIVIDAD),size = 1,colour="black")+ 
    xlab("Altitud m") + 
    ylab("Distribucion Acumulada (%)")+ 
    scale_x_continuous(limits=c(3500,5000),breaks=c(3500,3750,4000,4250,4500,4750,5000))+ 
    geom_vline(aes(xintercept=4000),linetype="dashed",size = 1)+ 
    geom_text(aes(4050,.85,label = "0°C MAAT isoterma") 
        ,vjust=0, 
        ,fontface= 'plain' 
        ,colour='black' 
        ,size=5)+ 
    theme( plot.background = element_rect(fill="white") 
     ,panel.background = element_rect(fill='white') 
     ,panel.grid.major = element_line(colour = 'grey', linetype = 'dashed') 
     ,panel.grid.minor = element_line(colour = 'white', linetype = 'dashed') 
     ,panel.border = element_blank() 
     ,axis.line = element_line(colour = 'black') 
     ,axis.text.x=element_text(colour="black") 
     ,axis.text.y=element_text(colour="black") 
     ,panel.grid.major =element_line(colour = 'grey', linetype = 'dashed') 
     ,legend.key=element_rect(fill="white",colour="white"),legend.position=c(0.25,0.7)) 


a + coord_flip() 

내가 https://dl.dropbox.com/u/11320858/plot_zoom_png2

+3

스택 오버플로에 오신 것을 환영합니다. 나는 그렇게 오래 전에 합류하지 않았을 때 상황이 어떻게 돌아가는지에 대해 약간 혼란스러워했다. 아이디어는 질문 할 때 코드로 재현 가능한 예제를 제공하는 것입니다. 훌륭한 코드를 제공했지만 데이터 구조를 볼 수 없습니다. 그러므로'dput (intactos, 20)'을 사용하여 결과를 질문에 붙여 넣으십시오. 데이터가 독점적 인 경우 실제 데이터의 구조를 모방 한 "가짜"데이터를 만듭니다. 도움을 받으려면 [this useful post] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)를 읽으십시오. – SlowLearner

+0

감사합니다. 방금 샘플 데이터 프레임을 추가했습니다. – gmoazocar

+1

고마워요. 그러나 링크 된 그래픽은 두 개의 데이터 시리즈를 보여 주며 데이터 프레임은 하나만 보유하고있는 것처럼 보입니다. 나는 당신이 데이터 프레임에서 그룹핑 변수를 빠뜨린 것 같아요. 그것은 당신의 코드에서 ACTIVIDAD가 의미하는 것입니까? 두 시리즈의 데이터를 제공하거나 생성 할 수 있다면 우리는 도움이 될 것입니다. – SlowLearner

답변

1

덕분에 당신은 Slowlearner 도움이됩니다. 방금 해설로 코드를 수정했습니다. 코드 시작 부분에 melt() 함수를 사용하고 코드에 scale_linetype_maunual을 사용하여 코드를 수정할 수 있습니다. 여기에 새 코드가 있습니다.

library(reshape) 

intactos2 <- melt(intactos, id.var = c("ecd","ACTIVIDAD")) 

a <- ggplot(intactos2,aes(y = value, x= ecd,group=ACTIVIDAD))+ 
    geom_line(aes(colour = ACTIVIDAD,linetype=ACTIVIDAD),colour='black',size=0.5)+ 
    scale_linetype_manual("Glaciares rocosos", 
          breaks=c("1","2"), 
          values=c("solid","dashed"), 
          labels = c("Activos", "Inactivos"))+ 
    ylab("Altitud m") + 
    xlab("Distribucion Acumulada (%)\n")+ 
    scale_y_continuous(limits=c(3500,5000), 
         breaks=c(3500,3750,4000,4250,4500,4750,5000))+ 
    scale_x_continuous(limits = c(0.00, 1.00), 
         breaks = seq(0, 1, 0.1), 
         labels=seq(0,100,10))+ 
    theme( plot.background = element_rect(fill="white") 
     ,panel.background = element_rect(fill='white') 
     ,panel.grid.major = element_line(colour = 'grey', linetype = 'dotted',size=0.5) 
     ,panel.grid.minor = element_line(colour = 'white', linetype = 'dashed') 
     ,panel.border = element_blank() 
     ,axis.line = element_line(colour = 'black') 
     ,axis.text.x=element_text(colour="black") 
     ,axis.text.y=element_text(colour="black") 
     ,panel.grid.major =element_line(colour = 'grey', linetype = 'dashed') 
     ,legend.key=element_rect(fill="white",colour="white"),legend.position=c(0.3,0.8))+ 
      geom_hline(aes(yintercept=4000),linetype="solid",size = 0.5) 
a 

a + annotate("text",label="0°C MAAT isoterma",x=0.8,y=4050,size=4) 

여기 내가 마침내 얻은 음모! https://dl.dropbox.com/u/11320858/plot3.png

+1

다행입니다. 내 대답을 통해 질문을 해결할 수 있다면 올바른 답변으로 표시하거나 (답변 왼쪽에있는 체크 표시를 클릭하여) 또는 upvoting (답변 옆에있는 위로 버튼 클릭) 할 수 있습니다. 이런 방식으로 질문에 대답하는 사람들은 인정을 받고 그것을 계속하도록 동기 부여됩니다. – SlowLearner

2

W를 만들려고 플롯이다 음, 당신이 공유 할 수있는 제한된 데이터를 제공한다고 말하기는 어렵지만 아마도 아래와 같은 것을 원할 것입니다. 팅커를 가지고 그것이 당신을 위해 작동하는지 확인하십시오.

screenshot

library(ggplot2) 
library(scales) 

intactos <- 
    structure(list(ZPIE = c(4129L, 4547L, 4448L, 4181L, 4439L, 4113L,3893L, 4275L, 4385L, 4037L), ecd = c(0.126984126984127, 0.849206349206349,0.706349206349206, 0.222222222222222, 0.69047619047619, 0.233766233766234,0.038961038961039, 0.420634920634921, 0.626984126984127, 0.0238095238095238)), .Names = c("ZPIE", "ecd"), row.names = c(79L, 200L, 132L, 102L, 219L,272L, 278L, 84L, 17L, 133L), class = "data.frame") 

intactos$ACTIVIDAD <- "one" 
intactos$ACTIVIDAD[6:10] <- "two" 

library(reshape) 
intactos.m <- melt(intactos, id.var = c("ecd", "ACTIVIDAD")) 

ggplot(data = intactos.m, aes(y = value, x = ecd, group = ACTIVIDAD)) + 
    geom_line(aes(colour = ACTIVIDAD)) + 
    ylab("Altitud m") + 
    xlab("Distribucion Acumulada (%)\n") + 
    scale_y_continuous(limits = c(3500,5000), 
         breaks = c(3500,3750,4000,4250,4500,4750,5000))+ 
    scale_x_continuous(limits = c(0, 1.1), 
         breaks = seq(0, 2, 0.1)) + 
    scale_colour_manual("Legend", labels = c("line one", "line two"), 
         values = c("blue", "red")) + 
    geom_hline(aes(yintercept = 4000),linetype = "dashed", size = 1)+ 
    geom_text(data = intactos[1, ], aes(y = 4050, x = 0.85), 
       label = "0°C MAAT isoterma", vjust = 0, fontface = 'plain', 
       colour = 'black', size=5) + 
    theme() 
관련 문제