让ggplot2在顶部只写一次轴标签的数量级

Cle*_*ter 5 label axis r ggplot2

我想ggplot2只将科学记数法的第一部分写到轴上,然后在轴的顶部添加一个 $x 10^n$ 数量级。有没有一个功能可以做到这一点?

这是一个带有 hack 的 MWE 来说明我的意思:

ggplot(data = data.frame(x = 1:10, y = seq(1, 2, l = 10)*1000), aes(x,y)) + geom_line()
Run Code Online (Sandbox Code Playgroud)

未缩放 y 轴

而我想要的是:

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"))
Run Code Online (Sandbox Code Playgroud)

缩放 y 轴

作为一个附带问题,我注意到当刻度标签很大时,轴标签会很快接近刻度标签。有没有办法在它们之间设置自动间距?

Jon*_*ing 2

如果您想对不同的数据使用类似的标签规则,这里有一种更自动化的方法来执行您的黑客攻击。它将计算出适当的 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述