使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()

《使ggplot2在顶部只写一次轴标签的数量级》

虽然我喜欢这样的:

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"))

《使ggplot2在顶部只写一次轴标签的数量级》

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

最佳答案 如果您想对不同的数据使用类似的标签规则,这是一种更自动化的方式来执行您的黑客攻击.它将确定使用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)

《使ggplot2在顶部只写一次轴标签的数量级》

点赞