2016-05-31 3 views
2

다음 플롯에 대한 범례를 작성하려고합니다. 점선으로 표시되고 점선으로 표시되고 점선으로 점선으로 표시되고 올바르게 표시되지 않습니다. 나는 2 개의 미학을 가지고 있기 때문에 때로는 단 한 줄의 형식을 보여 주기도하고 때로는 아무것도 나타내지 않는 경우도 있습니다. scale_linetype_manual()guides()을 사용했지만 원하는 효과를 낼 수 없었습니다. 그러나ggplot2의 두 미학과 geom_abline에 대한 전설

내가 작성한 코드는 전설 작성에 대한 코드를 삭제했습니다.

exemplo<-data.frame(Location = c("Tiburon Peninsula", "San Francisco","Santa Barbara area", "Santa Monica Mountains", "Marin County", 
          "Santa Cruz Mountains", "Monterey County", "San Diego County","California Coast"), 
       Area = c(5.9, 45, 110, 320, 529, 1386, 3324,4260, 24520), 
       Species = c(370L, 640L, 680L, 640L, 1060L, 1200L,1400L, 1450L, 2525L)) 
modelo<-lm(log(Species,10)~log(Area,10),data=exemplo) 

modelo_nls<-nls(Species~a*Area^z,start=list(a=1,z=0.25),data=exemplo) 
linha<-data.frame(x=log10(seq(1,25000,100)),y=log10(predict(modelo_nls,newdata=data.frame(Area=seq(1,25000,100))))) 
ggplot(data=exemplo,aes(x=log10(Area),y=log10(Species))) + geom_point() + 
geom_abline(intercept = modelo$coefficients[1], slope = modelo$coefficients[2],linetype="dotted") + 
geom_line(data=linha,aes(x=x,y=y),linetype="dashed")+   
xlab(label="Área(ha)") + ylab(label="Número de espécies") 

답변

5

한 가지 방법은 여분의 열이 각 행이 속한 모델을 나타내는 하나 개의 데이터 프레임으로 두 개의 예측 라인을 결합하는 것입니다.

# Add model = 'A' to this data frame (I may have got A and B the wrong way round) 
    linha <- data.frame(x = log10(seq(1,25000,100)), 
         y = log10(predict(modelo_nls,newdata=data.frame(Area=seq(1,25000,100)))), 
         model = 'A') 

# Make data frame of line from modelo 
lin2 <- data.frame(x = log10(seq(1,25000,100)), 
        y = predict(modelo, newdata = list(Area = seq(1,25000,100))), 
        model = 'B') 

# Combine two models 
combinedLines <- rbind(linha, lin2) 

는 여기에 당신이 그것을 할 수있는 방법 미적

enter image description here

1

ggplot(data=exemplo,aes(x=log10(Area),y=log10(Species))) + geom_point() + 
geom_line(data=combinedLines, aes(x=x,y=y, linetype = model))+   
xlab(label="Área(ha)") + ylab(label="Número de espécies") 
로 모델과 음모.

nlha <- data.frame(x=log10(seq(1,25000,100)),y=(predict(modelo,newdata=data.frame(Area=(seq(1,25000,100)))))) 
model_data <- cbind.data.frame(type=rep(c("A","B"),each=250),rbind(nlha,linha)) 
ggplot(data=exemplo,aes(x=log10(Area),y=log10(Species))) + geom_point() + geom_line(data=model_data,aes(x=x,y=y,linetype=type))+ xlab(label="Área(ha)") + ylab(label="Número de espécies") 

도움이되기를 바랍니다.