如何使用ggplot2和刻度将轴标签从科学格式更改为幂格式?

时间:2019-11-13 14:27:20

标签: r ggplot2

我正在ggplot中创建图表,并希望将x轴刻度从科学格式更改为10 ^ n,20 ^ n,30 ^ n等格式,而无需将轴更改为对数刻度。我已经从该线程的注释部分复制了代码:

How can I format axis labels with exponents with ggplot2 and scales?

并对此稍作改动:

scale_x_continuous(label= function(x) {ifelse(x==0, "0", parse(text=gsub("[+]", "", gsub("e", "^", scientific_format()(x)))))} )

这给了我刻度轴标签,形式为1 ^ n,2 ^ n,3 ^ n等。有没有办法将其更改为10 ^ n,20 ^ n,30 ^ n等(显然为n-1 )?

非常感谢。

2 个答案:

答案 0 :(得分:0)

这符合您的需求吗?

library(scales)
library(ggplot2)
library(stringr)
library(magrittr)

my_format <- function(x){
  g <- scientific_format()(x) %>% 
    stringr::str_split("e\\+") %>% 
    unlist() %>% 
    as.numeric()
  paste0(g[1], "0^", g[2]-1)
}

ggplot(dd, aes(x, y)) + 
  geom_point()+
  scale_x_continuous(label= function(x) {
    ifelse(x==0, 
           "0", 
           parse(text = my_format(x))
           )
    } )

答案 1 :(得分:0)

多摆弄代码之后,我想出了以下解决方案:

scale_x_continuous(label= function(x) {ifelse(x==0, "0", parse(text=gsub("[+]","",gsub("e","0^4",gsub("05","",scientific_format()(x))))))} )

我的x轴刻度值的格式设置为0、1 ^ 5、2 ^ 5和3 ^ 5。该代码在第一个数字之后添加一个零,并将“ 5”替换为“ 4”,这样我现在得到0、10 ^ 4、20 ^ 4和30 ^ 4作为我的x轴刻度值。

希望这对人们有帮助!应该有可能使代码适应所需的任何功率值。