축 틱 수 증가


191

일부 데이터에 대한 플롯을 생성하고 있지만 틱 수가 너무 적으므로 더 정확하게 읽을 수 있어야 합니다.

ggplot2에서 축 틱 수를 늘리는 방법이 있습니까?

ggplot에 벡터를 축 틱으로 사용하도록 지시 할 수는 있지만 모든 데이터에 대해 틱 수를 늘리는 것이 좋습니다. 즉, 데이터에서 눈금 번호를 계산하고 싶습니다.

아마도 ggplot은 일부 알고리즘으로 내부적 으로이 작업을 수행하지만 원하는 방식에 따라 변경하는 방법을 찾을 수 없었습니다.

답변:


188

scale_x_continuous및 / 또는를 수정하여 ggplots 기본 스케일을 재정의 할 수 있습니다 scale_y_continuous. 예를 들면 다음과 같습니다.

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

당신에게 이것을 제공합니다 :

여기에 이미지 설명을 입력하십시오

스케일을 재정의하면 다음과 같은 것을 얻을 수 있습니다.

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

여기에 이미지 설명을 입력하십시오

플롯의 특정 부분에서 단순히 "확대"를 원하면 xlim()및을 ylim()각각보십시오. 다른 주장을 이해하기 위해 좋은 통찰력도 여기 에서 찾을 수 있습니다 .


4
실제로 요점은 by다른 수의 척도로 인수 를 "일반화"하는 것 입니다. 즉, 0.5는 c (-3,3)의 범위에 해당하는이 데이터에 대한 좋은 값이지만 범위에 해당하는 데이터에는 적합하지 않습니다. c (0,5000)입니다. 그것을 계산하는 함수가 있습니까?
João Daniel

3
@ JoãoDaniel-ggplot이 자동으로 괜찮은 일을한다는 것을 의미합니다. 만족스러운 결과 집합을 생성하지 못하면 다른 기능을 제공하는 기능이 내장되어 있는지 확실하지 않습니다. 원하는 세부 수준은 플롯에 따라 다르지만 패턴을 식별하기 위해 테스트 사례와 지정된 세부 수준을 통해 생각할 수 있습니다. 이것이 박스 플롯 인 경우와 같은 max-min/30것이 일반적인 "버킷"입니다. 크기 ...하지만 좋은 출발점이 될 수도 있고 아닐 수도 있습니다.
체이스

4
시계열에 대한 연도의 달과 같은 x 축의 범주 형 값은 어떻습니까?
Scott Davis

3
@ScottDavis는 링크를 살펴 본다 . 다음을 사용할 수 있습니다scale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel 2016 년

coord_cartesian대신 줌을 사용해야합니다 xlim. stackoverflow.com/questions/25685185/…
qwr

167

을 바탕으로 다니엘 Krizian의 코멘트 , 당신은 또한 사용할 수 있습니다 pretty_breaks으로부터 기능을 scales자동으로 가져 라이브러리 :

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

원하는 틱 수를 삽입하기 만하면됩니다 n.


약간 덜 유용한 솔루션 (데이터 변수를 다시 지정해야하기 때문에) 내장 pretty함수를 사용할 수 있습니다 .

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))

16
이것은 분명히 최고의 답변입니다! Btw ggplot은 이미 가져 scales오지만 네임 스페이스에 함수를 추가하지 않습니다. 따라서로 가져 오기없이 호출 할 수 있습니다 scales::pretty_breaks(n = 10).
동안

63

에 함수 인수를 제공 할 수 scale있으며 ggplot은 해당 함수를 사용하여 눈금 위치를 계산합니다.

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))

81
자체 기능을 만들 필요가 없습니다 number_ticks. 이것은 이미에서 구현되었습니다 pretty_breaks {scales}. 따라서 : ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
다니엘 Krizian

11
@Daniel Krizian : 1) 필요 require(scales)2) 이것은 과학적 표기법으로 나타나는 나의 휴식을 막는 것으로 보입니다. 따라서 1e6은 1000000으로 변경됩니다 ??
smci

6
패키지 pretty없이 기본 R을 사용할 수 있으며 scales값을 인수로 제공하면됩니다. 예를 들면 :(breaks=pretty(dat$x, n=10))
MOLX

@smci ggplot2가 작동하면 스케일을 사용할 수 있습니다. ggplot2는 스케일이 없으면 작동하지 않습니다.
Claus Wilke

7

다가오는 v3.3.0 버전은 및에 대한 나누기를 자동으로 생성 ggplot2하는 옵션이 있습니다.n.breaksscale_x_continuousscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

여기에 이미지 설명을 입력하십시오

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

여기에 이미지 설명을 입력하십시오


4

또한

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

비닝 또는 이산 스케일링 된 x 축 데이터 (즉, 반올림이 필요하지 않음)에 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.