Plot negative values in logarithmic scale with ggplot 2

后端 未结 2 2042
小鲜肉
小鲜肉 2021-01-06 10:25

I need to plot with ggplot2 package in R a graph with some negative values using an x logarithmic scale.

For example I want to plot these points using an x logarithmi

相关标签:
2条回答
  • 2021-01-06 10:49

    For this, I find the pseudolog10_trans transformation from the ggallin package to be very helpful, as it can accomodate situations with both positive and negative numbers on a log scale. E.g.

    library(ggplot2)
    library(ggallin)
    
    x <- c(-1,-10,-100, 1, 10, 100)
    y <- c(1,2,3, 1,2,3)
    
    df = data.frame(x = x, y = y)
    
    My_Plot = ggplot(
        df, 
        aes(x=x, y=y)) + 
        geom_point() + 
        scale_x_continuous(trans = pseudolog10_trans)
    
    My_Plot
    
    0 讨论(0)
  • 2021-01-06 10:56

    There are two problems to solve - calculate log from negative values and then combine logarithmic scale and reverse scale.

    To combine log and reverse scales you can use solution provided by @Briand Diggs on this SO question.

    library(scales)
    reverselog_trans <- function(base = exp(1)) {
        trans <- function(x) -log(x, base)
        inv <- function(x) base^(-x)
        trans_new(paste0("reverselog-", format(base)), trans, inv, 
                  log_breaks(base = base), 
                  domain = c(1e-100, Inf))
    }
    

    To make it work with negative values, provide x values as -x in ggplot() call and then use another transformation for labels= inside scale_x_continuous() to get back negative values.

    df<-data.frame(x=c(-1,-10,-100),y= c(1,2,3))
    ggplot(df,aes(-x,y))+geom_point()+
      scale_x_continuous(trans=reverselog_trans(base=10),
                         labels=trans_format("identity", function(x) -x))
    

    enter image description here

    0 讨论(0)
提交回复
热议问题