전산통계학 9주차 강의 - 3dplot, Curve, graph, Legends, leyout, multipleview, Outer, persp, teachingdemos

코딩 공부/R-전산 통계학 2019. 12. 16. 23:40
반응형

Graph 그리기는 다음과 같은 순서를 기억

High-Level Plot Functions ; 우선 그래프부터 그리고 난 후에
Low-Level Plot Functions ; 입력되어 있는 high lever 의 안에다가 y=x 처럼 문자를 투입시킬 수 있다

 


High-Level

# DATA
x <- rnorm(50); y <- rnorm(50)
group <- rbinom(50, size=1, prob=.5)              확률론내용 :   n=1 <- bernoulli , 성공확률=0.5 , 이 행위를 50번 실행
group
plot(x,y)

 

새창으로 보고싶다면 윈도우에 한해서 win.graph() 를 치고나서 다시 plot를 치자


plot(x, y, xlab="X", ylab="Y", sub="ANG?", main="Oh! jesus", pch=22, col="orange")
타이틀을 설정하는 셈;

x축 이름, y축 이름, 그래프 이름, pch=좌표의 모양은 리퍼런스1 자료에 모양 및 번호가 나와있다

해당 자료를 찾는 것이 귀찮다면 다음 링크를 참고하며 공부하는 것도 좋습니다

https://rfriend.tistory.com/149

 

R 그래프 모수(Graphical Parameters) : 기호 모양 pch, 크기 cex, 선 유형 lty, 선 두께 lwd

지난번 포스팅에서 R 그래프 모수 (Graphical Parameters)를 설정하는 2가지 방법(par(), arguments)에 대해서 소개하였습니다. 이번 포스팅에서는 그래프 모수의 기호, 선 모수 설정에 대해서 하나씩 예를 들어보..

rfriend.tistory.com




plot(x, y, xlab="X", ylab="Y", main="Y vs X",
     pch=ifelse(group==1, 5, 19),
     col=ifelse(group==1, "red", "blue"))


위와 같이 우리가 함수를 작성할 때 쓰던 명령어들도 plot 을 그릴 때, 논리와 순서만 맞다면 충분히 쉽게 작성할 수 있다


<첨언>

다음 밑의 명령어를 입력함으로써, type = "" 에 따라서 어떤 식으로 plot 이 작성되는지 알아보자
plot(x, y, xlab="X", ylab="Y", main="Y vs X", type="n") 
plot(x, y, xlab="X", ylab="Y", main="Y vs X", type="l") 

plot(x, y, xlab="X", ylab="Y", main="Y vs X", type="p")


Low-Level
points(x[group==1], y[group==1], pch=5, col="red") 

처음에 위에서  group= 버놀리 였음을 기억하자 = 0또는 1밖에 값이 없다
points(x[group==0], y[group==0], pch=19, col="blue")

plot(x, y, xlab="X", ylab="Y", main="Y vs X", type="n")
points(cbind(x,y)[group==1,], pch=5, col="red")

 

위에서와 차이는 x,y를 따로 한건데 밑에서는 행렬로 만들고 한번에 한 것 ;  그냥 위의 명령어로 적어서 혼동을 줄이는 것이 좋아보임
points(cbind(x,y)[group==0,], pch=19, col="blue")

plot(sort(x), sort(y), type="p", lty=4, lwd=3, col="blue")

type에서는 p=점들 \b=빈 공백들은 짥은선분\ l=선분 으로 표시되고,  lty 와 lwd 는 각각 선분모양, 선분굵기를 말한다


plot(x, y, type="n")
lines(sort(x), sort(y), type="b")                                               점타입의 선을 그어라
lines(cbind(sort(x),sort(y)), type="l", lty=1, col="blue")           역시 선을 그어라


Histogram
hist(x, main="Histogram of X", col="peru")
hist(x, freq=FALSE, col="red", main="Histogram with Normal Curve")

 

위의 명령어를 입력해보고, 어떤 그림인지 알아보자


Basic boxplot

boxplot(x, main="Boxplot of X", border="dark sea green", lwd=2)
boxplot(x, main="Boxplot of X", border="dark sea green", lwd=2, horizontal = T)

여기서 horizental 은 무슨 명령어일까?


boxplot(x~group, main="Boxplot of X by Group", names=c("Group 0", "Group 1"), border=c("red", "blue"), lwd=2)


Curve (2차함수 그래프 표현)
curve(3*x^5-5*x^3+2*x, from=-1.25, to=1.25, lwd=2, col="purple")

curve(dgamma(x, shape=2, scale=1), from=0, to=7, lwd=2, col="red")

curve(dnorm, from=-5, to=5, lwd=2, col="red")

curve(dnorm(x, mean=2), lwd=2, col="BLUE", add=TRUE)  

add=TRUE  가 있으면 그림을 추가해서 그리는거다 = 누적 그리기


<첨언>

아래의 명령어를 입력함으로써, 더 자세한 그래프를 그릴 수 있을 것이다


lines(c(0, 0), c(0, dnorm(0)), lty=2, col="red")   
lines(c(2, 2), c(0, dnorm(2, mean=2)), lty=2, col="blue")


3D Plot

library(TeachingDemos)

반드시 티칭데모스라는 패키지를 설치하고 사용해야한다


outer

x <- y <- seq(-1, 1, len=25)
z <- outer(x, y, FUN=function(x,y) -x*y*exp(-x^2-y^2))

z라는 변수를 x,y 로 이루어진 함수의 결과값으로 투입시켜주는 명령어임을 살펴볼 수 있다


persp (3d plot 과제에서 많이 다뤄야 할 친구)

 

persp(x,y,z, shade=0.8, col="green3")                                 "3-D Surface Plot"

points(trans3d(1,1,.1, view), cex=2, col="red", pch=19)     "Point at (x=1, y=1, z=.01)"
text(trans3d(1,1,.1, view), "(1,1,0.1)", pos=1, font=2)          "Add text"
lines(trans3d(x, y=-.5, z[7,], view), lwd=2, col="red")      "Line of z vs x, when y=-.5"


<문제>

다음 명령어를 입력해보고, ""가 있고 없고의 차이를 스스로 파악해보라

plot(1:10, type="n", xlab="X", ylab="Y")
text(5.5, 9, "expression(y==alpha[1]*x+alpha[2]*x^2)", cex=1.5)
text(5.5, 8, expression(y==alpha[1]*x+alpha[2]*x^2), cex=1.5)


<첨언>

그러면 독자들은 '' 를 만들 수 있겠습니까?


multiple view
par(mfcol=c(2,1))  
plot(rnorm(100), main="Figure 1", pch=19, col="red")
plot(rnorm(100), main="Figure 2", pch=5, col="blue")


<첨언>

그렇다면 좌,우로 plot 2개를 나타내고 싶다면 어떻게 명령어를 변경해야 할까?


leyout
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE), heights=c(.5,1))
layout.show(3) # View layout

layout(matrix(c(1,1,2,2), 2, 2, byrow = TRUE), heights=c(1,1))
layout.show(2)


Text in plot

plot(1:10, type="n", xlab="X", ylab="Y")


text(5.5,9, "expression(y==alpha[1]*x+alpha[2]*x^2)", cex=1.5)
text(5.5,8, expression(y==alpha[1]*x+alpha[2]*x^2), cex=1.5)

plot(1:10, type="n", xlab="X", ylab="Y")
text(5.5,8, expression(y==beta[1]*x[1]+gamma[2]*x[2]+alpha[3]*x[3]^4), cex=1.5)

 

theta = 3
text(5.5,6, "theta=3; bquote(hat(theta)==.(theta))", cex=1.5) 
text(5.5,5, bquote(hat(theta)==.(theta)), cex=1.5)               
; "bquote = 셋타에 넣은 값이 그대로 전달되게끔 하는 명령어"

위의 사진을 참고해보면  ""의 유무 에 따라서 수학적인 수식으로 나올지, 그대로 나올지가 결정된다


Legends
windows(width=9, height=6)                               # Fix window size
par(mfrow=c(1,2), oma=c(3,0,2,0))                      # Add an outer margin to the figure
set.seed(789)
x1 <- rnorm(10); x2 <- rnorm(10, mean=2) 
y1 <- rnorm(10); y2 <- rnorm(10, mean=2)

# Plot 1
plot(range(x1,x2), range(y1,y2), main="Figure 1", type="n", xlab="X", ylab="Y")

points(x1, y1, col="red", pch=19) # Group 1
points(x2, y2, col="blue", pch=0) # Group 2

legend("topleft", c("Group 1","Group 2"), pch=c(19,0), col=c("red", "blue"), horiz=TRUE, bty="n")
legend("topleft", c("Group 1","Group 2"), pch=c(19,0), col=c("red", "blue"), horiz=F, bty="n")
legend("topleft", c("Group 1","Group 2"), pch=c(0,19), col=c("Blue", "Red"), horiz=F, bty="n")

legend(locator(1), c("Group 1","Group 2"), pch=c(19,0), col=c("red", "blue"), title="Legend")

마우스로 원하는 위치에 레전드 출력가능


# Plot 2
plot(range(x1,x2), range(y1,y2), main="Figure 2", type="n", xlab="X", ylab="Y") 
lines(sort(x1), sort(y1), col="Red", type="l", pch=1) # Group 1 

points(sort(x1), sort(y1), col="white", pch=19)
points(sort(x1), sort(y1), col="black", pch=1)


lines(sort(x2), sort(y2), col="blue", type="o", pch=0) # Group 2

a<- max(x1) ; b <- max(y1)
c <- min(x2) ; d <- min(y2)

points(c(a,c), c(b,d), col="white", pch=c(19,15), cex=1.2)       ;  "cex = 점의 사이즈"
lines(c(a,c),c(b,d), col="forestgreen", type="l")
lines(sort(x1), sort(y1), col="Red", type="l") # Group 1 
lines(sort(x2), sort(y2), col="blue", type="l") # Group 2

legend(-2, 2.5, c("Group 1", "Group 2"), pch=c(19,0), col=c("red", "blue"), horiz=TRUE, bty="n", lty=1)


last
par(mar=c(5,5,5,5))
plot(1:10, axes=FALSE, ann=FALSE)

axis(2)
axis(3, at=seq(1,10,by=.5), labels=format(seq(1,10,by=.5), nsmall=3))
axis(4, at=1:10, las=2)

tck <- axis(1, labels=FALSE)
text(tck, par("usr")[3]-.5, labels=paste("Label", tck), srt=45, adj=1, xpd=TRUE)  
box()

mtext(paste("Side", 1:4), side=1:4, line=3.5, font=2) # Add axis labels


TAG