R을 이용해서 그래프를 그리다보면, 그래프의 x축 혹은 y축의 범위를 지정하여 확대/축소 하고 싶어질때가 있다. 이때, xlim
, ylim
함수를 사용하면 된다. 각각 정의하기도 귀찮다면 lims
로 한번에 x/y축 범위를 지정할 수도 있다. 그 방법을 한번 알아보자.
데이터 만들기
복잡한 그래프를 그릴게 아니라서, 간단하게 만들어봤다.
tb1 = tibble(x = c(1,3),
y = c(4, 7.7))
# A tibble: 2 × 2
x y
<dbl> <dbl>
1 1 4
2 3 7.7
그래프 그리기
geom_col
함수로 막대그래프를 그린다. 별다른 범위를 지정하지 않았기 때문에, x축이나 y축에 꽉찬 그래프가 자동으로 그려진다.
ggplot(tb1, aes(x,y)) +
geom_col()
xlim
, ylim
함수를 사용해서 x축은 -5 ~ 9
까지의 범위를 지정하고, y축은 0 ~ 13
으로 그래프축의 범위를 지정해본다. lims
을 사용하면 x/y축을 동시에 지정할 수 있다. 아래 2개의 소스는 동일한 결과를 나타낸다. 이렇게 지정하고 나니 여백이 자연스럽게 생기게된다.
# case1
ggplot(tb1, aes(x,y)) +
geom_col() +
xlim(-5, 9) +
ylim(0, 13) +
theme(axis.title = element_blank())
# case2
ggplot(tb1, aes(x,y)) +
geom_col() +
lims(x = c(-5, 9), y = c(0, 13)) +
theme(axis.title = element_blank())
x축의 breaks
와 labels
을 지정해서 그래프의 x축 정보를 바꾸려고 하면, 아래와 같은 에러가 발생한다.
# 잘못된 소스예시
ggplot(tb1, aes(x,y)) +
geom_col() +
scale_x_continuous(breaks = c(1,3),
labels = c("A", "B")) +
xlim(-5, 9) +
ylim(0, 13)
[에러메시지]
Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing scale.
이 뜻은 x축에 대해 범위지정을 이미 했는데, 중복으로 한번더 지정을 하다보니 나오는 메시지이다. 이상하다 나는 한번만 정의를 했는데, 어디서 2번했다는 건지 찾기가 어려웠다. 나중에 찾아보니, 지금 위의 소스에서는 x축 범위지정할 수 있는 함수 xlim
와 scale_x_continuous
2개를 사용해서 발생한 에러메시지였다. scale_x_continuous
함수정보에 보면, limits
파라메터를 정의할 수 있는데, 이게 xlim
과 동일한 효과를 내는 기능이다.
그래서 아래와 같이 수정되어야 한다.
# 수정후
ggplot(tb1, aes(x,y)) +
geom_col() +
scale_x_continuous(breaks = c(1,3),
labels = c("A", "B"),
limits = c(-5, 9)) + # limits 정보추가.
# xlim(-5, 9) + # xlim 은 주석으로 삭제처리.
ylim(0, 13)
limits 파라메터를 (-5,9)-->(-2,6)
으로 변경해보자. 그래프가 확대된 듯이 꽉차보이는 것을 알 수 있다. 효과적인 그래프 표현을 위해서 영역지정에 능숙해질 필요가 있으니 한번 해보시길 바란다.
ggplot(tb1, aes(x,y)) +
geom_col() +
scale_x_continuous(breaks = c(1,3),
labels = c("A", "B"),
limits = c(-2, 6)) + # (-2, 6) 으로 변경.
ylim(0, 13)