Заставьте ggplot2 записать порядок величины метки оси только один раз вверху
Я хотел бы сделать ggplot2
запишите на ось только первую часть научной нотации, а затем добавьте $x 10^n$ поверх оси на порядок величины. Есть ли функция для этого?
Вот MWE со взломом, чтобы показать, что я имею в виду:
ggplot(data = data.frame(x = 1:10, y = seq(1, 2, l = 10)*1000), aes(x,y)) + geom_line()
в то время как я бы что-то вроде:
ggplot(data = data.frame(x = 1:10, y = seq(1, 2, l = 10)*1000), aes(x,y)) + geom_line() +
scale_y_continuous(breaks = c(1, 1.25, 1.5, 1.75, 2, 2.05)*1000, label = c(1, 1.25, 1.5, 1.75, 2, "x 10^3"))
В качестве побочного вопроса я заметил, что метка оси быстро приближается к метке тика, когда они большие. Есть ли способ установить автоматический интервал между ними?
1 ответ
Вот более автоматизированный способ выполнить ваш хак, если вы хотите использовать похожие правила маркировки для разных данных. Он определит подходящую степень 10, чтобы использовать и применить это к маркировке:
y_breaks = pretty_breaks()(data$y)
y_max_exp = floor(log10(max(y_breaks)))
y_breaks = c(y_breaks, max(y_breaks) * 1.025)
y_labels = if_else(y_breaks == max(y_breaks),
paste0("x 10^", y_max_exp),
as.character(y_breaks / (10^y_max_exp)))
ggplot(data, aes(x,y)) + geom_line() +
scale_y_continuous(breaks = y_breaks, label = y_labels, minor_breaks = NULL)