[r] ggplot을 사용하여 축의 숫자 형식을 어떻게 변경합니까?

R과 ggplot을 사용하여 일부 데이터의 산점도를 그리려고합니다 .y 축의 숫자가 컴퓨터 스타일 지수 형식 (예 : 4e + 05, 5e + 05)으로 나오는 것을 제외하고는 모두 좋습니다. 받아 들일 수 없으므로 500,000, 400,000 등으로 표시하고 싶습니다. 적절한 지수 표기법을 얻는 것도 가능합니다.

플롯의 코드는 다음과 같습니다.

p <- ggplot(valids, aes(x=Test, y=Values)) +
  geom_point(position="jitter") +
  facet_grid(. ~ Facet) +
  scale_y_continuous(name="Fluorescent intensity/arbitrary units") +
  scale_x_discrete(name="Test repeat") +
  stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar")

도움을 주시면 감사하겠습니다.



답변

또 다른 옵션은 쉼표로 축 눈금 레이블의 형식을 패키지를 사용하는 것입니다 scales, 그리고 추가

 scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = comma)

ggplot 문에.

패키지를로드하지 않으려면 다음을 사용하십시오.

scale_y_continuous(name="Fluorescent intensity/arbitrary units", labels = scales::comma)


답변

또한 축에 적절한 ‘x10 (superscript) 5’표기법을 제공하는 다른 방법을 찾았습니다. 나는 그것이 일부 사람들에게 유용 할 수 있기를 희망하여 여기에 게시하고 있습니다. 여기 에서 코드를 얻었 으므로 아무런 크레딧도 요구하지 않습니다. 바로 Brian Diggs에게갑니다.

fancy_scientific <- function(l) {
     # turn in to character string in scientific notation
     l <- format(l, scientific = TRUE)
     # quote the part before the exponent to keep all the digits
     l <- gsub("^(.*)e", "'\\1'e", l)
     # turn the 'e+' into plotmath format
     l <- gsub("e", "%*%10^", l)
     # return this as an expression
     parse(text=l)
}

다음으로 사용할 수있는

ggplot(data=df, aes(x=x, y=y)) +
   geom_point() +
   scale_y_continuous(labels=fancy_scientific) 


답변

x <- rnorm(10) * 100000
y <- seq(0, 1, length = 10)
p <- qplot(x, y)
library(scales)
p + scale_x_continuous(labels = comma)


답변

나는 여기 게임에 늦었지만 다른 사람들이 쉬운 해결책을 원한다면 다음과 같이 호출 할 수있는 일련의 기능을 만들었습니다.

 ggplot + scale_x_continuous(labels = human_gbp)

x 또는 y 축에 대해 사람이 읽을 수있는 숫자 (또는 일반적으로 실제로는 임의의 숫자)를 제공합니다.

여기에서 함수를 찾을 수 있습니다. Github Repo
함수를 스크립트에 복사하여 호출 할 수 있습니다.


답변

Jack Aidley가 제안한 답변이 유용한 답변이라는 것을 알았습니다.

다른 옵션을 버리고 싶었습니다. 작은 숫자가 많은 계열이 있고 축 레이블에 소수점을 완전히 쓰도록 (예 : 5e-05-> 0.0005) 가정합니다.

NotFancy <- function(l) {
 l <- format(l, scientific = FALSE)
 parse(text=l)
}

ggplot(data = data.frame(x = 1:100,
                         y = seq(from=0.00005,to = 0.0000000000001,length.out=100) + runif(n=100,-0.0000005,0.0000005)),
       aes(x=x, y=y)) +
     geom_point() +
     scale_y_continuous(labels=NotFancy) 


답변