用ggplot 2绘制对数刻度的负值

Dal*_*991 2 r log-analysis ggplot2

我需要使用x对数刻度在R图中用ggplot2包绘制一些负值.

例如,我想使用x对数标度绘制这些点

x <- c(-1,-10,-100)
y <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

我知道R中的负值的对数代表NA值,但我需要这样的结果:点击查看图片

是否可以使用ggplot2?

Mic*_*gge 8

为此,我发现包中pseudolog10_trans转换 非常有用,因为它可以在对数尺度上同时容纳正数和负数的情况。例如ggallin

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


Did*_*rts 5

有两个问题需要解决 - 从负值计算日志,然后结合对数标度和反向标度.

要结合日志和反向比例,您可以使用@Briand Diggs在此SO问题上提供的解决方案.

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

要使其与负值一起使用,请在调用中提供x值,然后对内部使用另一个转换以获取负值.-xggplot()labels=scale_x_continuous()

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

在此输入图像描述

  • 另一个问题..如果我在 x 轴上也有正数据,我该怎么办?例如'x &lt;- c(-10,1,10)'... (2认同)