Package plotrix

plotrix패키지를 소개하고자 합니다. 먼저 pie그래프인데요. R에서 제공하는 pie그래프입니다.

parts = c(22, 65, 10, 3)
states = c("New Jersey", "New York", "Pennsylvania", "Maryland")
pie(parts, labels = states)

plot of chunk unnamed-chunk-1

다음은 plotrix 패키지의 fan.plot과 pie3D, radial.pie 함수로 그린 그래프입니다. max.span을 조절하면 반원 또는 3/4원, 원등으로 조절할 수 있읍니다.

library(plotrix)
fan.plot(parts, labels = states, align = "left", max.span = pi)

plot of chunk unnamed-chunk-2

3차원 pie그래프는 pie3D를 이용해 그릴 수 있읍니다. explode는 중심에서 벗어난 정도를 말하며 theta는 3차원으로 보이는 각도인데 degree가 아니고 radian 값으로 주어야 합니다. 참고로 1 radian은 약 57.3도, 2 라이안은 114.6도 정도입니다.

pie3D(parts, labels = states, explode = 0.2, radius = pi/5, theta = 1)

plot of chunk unnamed-chunk-3

radial.pie는 설영하기 곤란한데 한번 보시죠.

radial.pie(parts, labels = states, radlab = TRUE)

plot of chunk unnamed-chunk-4

다음은 이중 y 축을 그리게 해주는 twoord.plot으로 그린 예입니다. 먼저 그래프를 그리는데 사용할 데이타를 만듭니다.

going_up <- seq(3, 7, by = 0.5) + rnorm(9)
going_down <- rev(60:74) + rnorm(15)
going_up
## [1] 4.354 2.803 3.470 4.850 5.925 6.532 5.786 6.921 7.229
going_down
##  [1] 73.38 72.62 71.38 71.05 70.97 69.22 69.75 67.04 66.40 64.41 62.59
## [12] 62.44 61.81 60.98 60.01

이제 그래프입니다. twoord.plot의 처음 네 인자는 lx,ly,rx,ry로 이는 그래프를 그릴 x,y 값을 가진 벡터로 먼제 왼쪽축의 x값(lx), y값(ly), 오른쪽 축의 x값(rx), y 값(ry)입니다. 그리고 x축, y축의 라벨과 오른쪽 y축의 라벨(rylab)을 정해줍니다. do.first 명령은 처음 두 사용 예에서 보듯이 배경 색과 grid를 그리는데 사용합니다.

twoord.plot(2:10, going_up, 1:15, going_down, xlab = "Sequence", ylab = "Ascending values", 
    rylab = "Descending values", lcol = 4, main = "Plot with two ordinates - points and lines", 
    do.first = "plot_bg();grid(col=\"white\",lty=1)")

plot of chunk unnamed-chunk-6

두개의 선 그래프가 서로 겹치는 것이 보기 싫어 분리하고 싶다면 다음과 같이 합니다. 여기서 사용한 range함수는 최대값 최소값을 반환해주는 함수로 y축의 범위를 range를 이용하여 최대값,최소값을 구한후 왼쪽 y축의 범위는 최대값에 10을 더해주고 오른쪽 y축의 범위는 최소값에 10 을 빼주는 식으로 정한후 오른쪽 y축의 라벨 위치를 정해줍니다. y축 의 tick표시 위치는 lytickpos, rytickpos인수를 조절하여 정할수 있읍니다.

# now separate the lines
twoord.plot(2:10, going_up, 1:15, going_down, xlab = "Sequence", lylim = range(going_up) + 
    c(-1, 10), rylim = range(going_down) + c(-10, 2), ylab = "Ascending values", 
    ylab.at = 5, rylab = "Descending values", rylab.at = 65, lcol = 4, main = "Plot with two ordinates - separated lines", 
    lytickpos = 3:7, rytickpos = seq(55, 75, by = 5), do.first = "plot_bg();grid(col=\"white\",lty=1)")

plot of chunk unnamed-chunk-7

선그래프 뿐만 아니라 바그래프도 그릴 수 있읍니다. type은 “bar”,“l"등으로 정할 수 있읍니다. (plot함수 참조)

twoord.plot(2:10, going_up, 1:15, going_down, xlab = "Sequence", lylim = range(going_up) + 
    c(-1, 10), rylim = range(going_down) + c(-10, 2), type = c("bar", "l"), 
    ylab = "Ascending values", ylab.at = 5, rylab = "Descending values", rylab.at = 65, 
    main = "Bars on left axis, lines on right axis", lytickpos = 3:7, rytickpos = seq(55, 
        75, by = 5), lcol = 3, rcol = 4, do.first = "plot_bg()")

plot of chunk unnamed-chunk-8

오른쪽 을 바로 왼쪽을 선그래프로 그리고 배경색을 노란색으로 바꾸어 봅니다.


twoord.plot(2:10, going_up, 1:15, going_down, xlab = "Sequence", lylim = c(-3, 
    8), rylim = c(50, 100), type = c("l", "bar"), ylab = "Ascending values", 
    rylab = "Descending values", lytickpos = 3:7, rytickpos = seq(55, 75, by = 5), 
    ylab.at = 5, rylab.at = 65, main = "Lines on left axis, bars on right axis", 
    lcol = 3, rcol = 4, do.first = "plot_bg(\"yellow\")")

plot of chunk unnamed-chunk-9

히스토그램과 덴시티커브를 같이 그려봅니다.

# histogram with density curve superimposed
xhist <- hist(rnorm(100), plot = FALSE)
xdens <- dnorm(seq(-3, 3, by = 0.05))
twoord.plot(xhist$mids, xhist$counts, seq(-3, 3, by = 0.05), xdens, type = c("bar", 
    "l"), lcol = 4, rcol = 2, ylab = "Counts", rylab = "Density", main = "Histogram and density curve", 
    halfwidth = 0.2, lylim = c(0, max(xhist$counts) + 1), rylim = c(0, 0.45), 
    lwd = 2)

plot of chunk unnamed-chunk-10

다음은 twoord.stackplot의 예입니다.

# plot data #
time <- 0:25
A <- 1 + 1/2 * sin(time/2)
B <- A + rnorm(length(A), sd = 1/10)
B <- B + rnorm(length(A), sd = 1/10)
sizeA <- floor(450 * (1 + 1/4 * sin(time/2 + 2)) * (1 + 0.1))
sizeB <- 1000 - sizeA
C <- (A * sizeA + B * sizeB)/(sizeA + sizeB)
# typical usage
twoord.stackplot(lx = time, rx = time, ldata = cbind(sizeA, sizeB), rdata = cbind(A, 
    B, C), lcol = c("grey80", "white"), rcol = c("blue", "red", "black"), ltype = "bar", 
    rtype = c("l", "p", "o"), border = "grey80", lylab = "Size", rylab = "A,B,C", 
    xlab = "Time", main = "a plot", incrylim = 2/100)

plot of chunk unnamed-chunk-11

다음은 triax.plot의 예입니다.

data(soils)
triax.plot(soils[1:10, ], main = "DEFAULT")

plot of chunk unnamed-chunk-12

triax.plot(soils[1:10, ], main = "PERCENTAGES (Counterclockwise axes)", tick.labels = list(l = seq(10, 
    90, by = 10), r = seq(10, 90, by = 10), b = seq(10, 90, by = 10)), pch = 3, 
    cc.axes = TRUE)

plot of chunk unnamed-chunk-12

triax.return <- triax.plot(soils[1:6, ], main = "GRID AND LEGEND", show.grid = TRUE, 
    show.legend = TRUE, col.symbols = 1:6, pch = 4)

plot of chunk unnamed-chunk-12

# triax.plot changes a few parameters
par(triax.return$oldpar)

이 외에도 다양한 함수가 많은데요. 아직 다 공부를 못한 관계로 다음에 또 소개하겠읍니다.