축 스케일 함수에서 ggplot2 사용자 정의 텍스트 형식을 theme ()에 설정된 형식 사양을 따르는 방법은 무엇입니까?
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
함수 의 출력이 내 테마 사양을 준수하도록 만드는가입니다.
답변
이를 수행하는 방법은 주석에서 제안한대로 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_markdown
할 text
것 axis.text.y
입니다. 하지만 . 대신 .NET 을 지정 하는 데 사용할 수 있도록 기본값을 올바르게 설정하는 방법에 대해서도 궁금 합니다 .