2011-09-30 6 views
1

R을 사용하여 동일한 플롯에 여러 세트의 정렬 된 쌍을 플롯하려고합니다. 그 사이에 선이 필요하지 않습니다. 간단한 선형 회귀에 의해. 다음은 일부 샘플 코드그래프에 여러 데이터 세트의 여러 세트를 그릴 때 R

sw_sd <- c(0, 20) 
sw_r <- c(5, 10) 
aa_sd <- c(0, 16) 
aa_r <- c(5, 8) 
png("5-airline-cals.png") 
plot.new() 
plot.window(xlim=c(0,25), ylim=c(0,12)) 
plot(c(aa_sd, aa_r)) 
plot(sw_sd,sw_r, pch=22, main="Capital Allocation Lines", xlab="Standard Deviation", ylab="Expected Return") 
sw_cal=lm(sw_r~sw_sd) 
aa_cal=lm(aa_r~aa_sd) 
abline(sw_cal, col="forestgreen", lwd=3) 
abline(aa_cal, col="blue", lwd=3) 
legend(1, 9, c("Southwest Airlines","American Airlines"), cex=0.8, col=c("forestgreen","blue"), lwd=3); 
box() 
dev.off() 

sd쌍은 X 좌표와 r의 y 좌표이다. 같은 산점도에 두 세트의 x-y 쌍이 필요합니다. 이것은 단순화 된 데이터이지만 아이디어를 얻을 수 있습니다.

+2

'? points','? lines' 그리고'? plot'을 읽는 코드의 모습을 보면 특별한 예를 들자 나쁜 생각이 들지 않을 것입니다. – joran

+0

팁 주셔서 감사합니다; 나는'lines'과'plot'에 대한 문서를보고 있었지만 아직도 당신이 생각하는 것이 확실하지 않습니다. 'abline' 대신'lines'을 사용해야합니까? 처음에는'lines'을 사용했지만 점들을 연속적으로 표현할 필요가 있습니다. * 개선해야 할 부분에 대해 좀 더 자세히 설명해 주시겠습니까? 제가 R을 처음 접했을 때 그것은 분명 도움이 될 것입니다. –

답변

5

죄송합니다. 다음은 좀 더 자세히 설명합니다.

기본 그래픽을 사용하여, 나는이 같은 것을 통해 무슨 일을하는지 달성 할 것 :

plot(c(sw_sd,aa_sd),c(sw_r,aa_r), pch = 22, 
     col = rep(c('forestgreen','blue'),each = 2),main="Capital Allocation Lines", 
     xlab="Standard Deviation", ylab="Expected Return") 
abline(lm(sw_r~sw_sd),col = 'forestgreen',lwd = 3) 
abline(lm(aa_r~aa_sd),col = 'blue',lwd = 3) 

같은에 포인트의 여러 세트를 플롯하는 방법을 요청했기 때문에 나는 points을 언급 lines가 된 이유를 그래프. R에 기본 그래픽 일반적인 전략은 plot 단일 호출로 플롯을 초기화 한 다음 plot.new에, lines, points처럼 abline

통화 물건을 사용에을 추가 plot.window가없는 것입니다 정말 필요한; R로 시작한다면 아마 잠시 동안 사용할 필요가 없을 것입니다.

일반적으로 plot에 전화 할 때마다 R이 새로운 플로팅 장치를 시작합니다. 따라서 plot에 대한 귀하의 반복 전화는 다시 돌아가고 다시 시작됩니다. 결과 플롯이 y 축 제한이 0에서 12가되지 않음을 알게 될 것입니다. 이는 이전 명령이 발생하지 않은 것처럼 새로 plot을 새로 호출 할 때마다 처음부터 다시 시작했기 때문입니다. 이것은 다른 점 집합이 나타나지 않는 이유이기도합니다.

마지막으로, 은 초보자에게 조금 유익한 정보이기 때문에 결국 ?plot을 읽는 것이 좋습니다. 그것은 x 축과 y 축 한계를 직접 전달할 수있는 것과 같은 작은 덩어리를 가지고 있습니다. type = "n"을 전달하면 오른쪽에 추가 할 수있는 치수가있는 빈 플롯을 생성 할 수 있습니다.

+0

도움에 감사드립니다. 그게 정말로 내가하려는 일을 단순화하고 나에게 좋은 학습 향상을 제공합니다. –

3

빠른 ggplot 기반 답 : RTFM 코멘트로 드라이브

dat <- data.frame(sd=c(0,20,0,16), 
        r=c(5,10,5,8), 
        airline=rep(c("Southwest","American"),each=2)) 

library(ggplot2) 
theme_update(theme_bw()) 
qplot(sd,r,data=dat,colour=airline)+geom_smooth(method="lm")+ 
    labs(x="Standard Deviation",y="Expected Return")+ 
    scale_colour_manual(value=c("forestgreen","blue")) 
2

Ben하지만 lattice의 데이터 프레임 사용 :

library(lattice) 
xyplot(r~sd, data=dat, groups=airline, 
    type=c('p', 'r'), 
    auto.key=list(space='right'), 
    main="Capital Allocation Lines", 
    xlab="Standard Deviation", ylab="Expected Return") 

당신은 ?panel.xyplot?xyplot에서 자세한 정보를 찾을 수 있습니다.

관련 문제