我想让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"))
作为一个附带问题,我注意到轴标签很快就会快速接近刻度标签.有没有办法在它们之间设置自动间距?
最佳答案 如果您想对不同的数据使用类似的标签规则,这是一种更自动化的方式来执行您的黑客攻击.它将确定使用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)