축 스케일 함수에서 ggplot2 사용자 정의 텍스트 형식을 theme ()에 설정된 형식 사양을 따르는 방법은 무엇입니까?

Aug 18 2020

ggplot2 축의 과학적 표기법을 같은 형식 3.23e+6에서 3.23 × 10^6. 고맙게도이 질문에 대한 답이 여기에 있습니다. ggplot을 사용하여 축의 숫자 형식을 어떻게 변경합니까?

기본적인 경우에 잘 작동합니다. 그러나 축 레이블의 서식을 변경하려는 경우에는 작동하지 않습니다. 이 예는 다음과 같습니다.

library(tidyverse)
ggplot(mpg, aes(displ, hwy*10^9)) + geom_point()

#makes the scientific notation using "AeB" explicitly write out Ax10^B
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(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
 theme(text = element_text(face = "bold")) 


결과 :

문제는 Y 축 텍스트가에 대한 호출에 지정된대로 굵게 표시되지 않는다는 것 theme입니다. 내가 사용하는 경우 browser의 내부에 무슨 일이 일어나고 있는지보고 fancy_scientific나는 그것이이 경우로 인쇄되어 클래스 "표현"의 객체 반환 참조 expression('2'%*%10^+01, '3'%*%10^+01, '4'%*%10^+01)기능 동안 scales::scientific의 I 피해야 할 종류 그러나 부합 함을 선언의 과학적 표기법을 강제로 사용할 수 있습니다, 내가 설정 한 테마 사양에 관계없이 문자열 벡터를 직접 반환합니다. 표시된 Y 축에 직접 렌더링되는 fancy_scientific것처럼 문자열 벡터를 반환하도록 수정할 때 '2'%*%10^+01.

그래서 질문은 어떻게 fancy_scientific함수 의 출력이 내 테마 사양을 준수하도록 만드는가입니다.

답변

JordanMandel Aug 20 2020 at 02:54

이를 수행하는 방법은 주석에서 제안한대로 ggtext패키지입니다.

library(tidyverse)
library(ggtext)
ggplot(mpg, aes(displ, hwy*10^9)) + geom_point()


#makes the scientific notation using "AeB" explicitly write out Ax10^B
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(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
  theme(text = element_text(face = "bold"), 
        axis.text.y = element_markdown(face = "bold")) 

이 코드를 실행하면 몇 가지 문제가 있음을 알 수 있습니다. 에서 작은 따옴표를 삭제하여 제거 할 수있는 선행 번호 주위에 따옴표가 l <- gsub("^(.*)e", "'\\1'e", l)있습니다. 내가 지정 오류 얻을 text으로 element_markdown()분명히 할 필요가 텍스트의 다른 부분에 대해 설정 될 수있는 몇 가지 기본 설정이 있기 때문입니다. 그래서 나는 구체적 axis.text.y으로 element_markdown. 이것은 표시 할 실시간 기호를 얻는 문제를 남깁니다. 굵은 서식을 적용하는 방법에 대한 질문에 답했기 때문에 이에 대한 후속 질문을 element_markdowntextaxis.text.y입니다. 하지만 . 대신 .NET 을 지정 하는 데 사용할 수 있도록 기본값을 올바르게 설정하는 방법에 대해서도 궁금 합니다 .