如何用常数因子转换ggplot2轴?

时间:2014-06-24 17:36:44

标签: r ggplot2 scale

我需要在ggplot2图形中修改y轴的比例:我想以千为单位表示y轴,而不是以单位表示。例如,标签必须为0; 1000; 2,000; 3,000而不是0; 1000000; 2000000; 3000000.

请不要告诉我将数据除以1000!

我的问题与ggplot2 axis transformation by constant factor相同。但是此处提供的解决方案会修改lables函数的scale_y_continuous参数,而我需要将此参数设置为comma。通过这个解决方案,我得到以下休息:0; 1000; 2000年; 3000 ...休息时间表示成千上万而不是数百万,这是一个很好的观点,但我放弃了comma标签。我想看到1000; 2,000; 3,000而不是1000; 2000年; 3000 ......

因此,修改lables函数的scale_y_continuous参数无用。这就是为什么我认为我必须使用trans函数的scale_y_continuous参数而不是labels参数。

有许多与trans参数匹配的内置转换并解决了scale包中的类似问题(例如,查看log_trans)。所以我尝试用下面的代码构建我自己的相似变换。

library(ggplot2)

var0 <- c(1:100)
var1 <- 1000000*rnorm(100)

homothetic_breaks<- function (n = 5, base = 1000) 
{
  function(x) {
    rng <- (range(x, na.rm = TRUE)/base)
    min <- floor(rng[1])
    max <- ceiling(rng[2])
    if (max == min) 
      return(base*min)
    by <- floor((max - min)/n) + 1
    base*seq(min, max, by = by)
  }
}

homothetic_trans <- function(base = 1000) {
  trans <- function(x) x/base
  inv <- function(x) x*base
  trans_new(paste0("diviseur_par_", format(base)), trans, inv,
            homothetic_breaks(base=base), domain = c(-Inf, Inf))
}

data <- data.frame(var0,var1)
p <- ggplot(data,aes(var0,var1))+geom_path()
p <- p + scale_y_continuous(trans=homothetic_trans,labels = comma) 
p

当我运行此代码时,我收到以下消息: “错误:str_c的输入应该是原子矢量”,并且y轴的中断与我运行以下代码时得到的相同:

library(ggplot2)

var1 <- 1000*rnorm(100)
var0 <- c(1:100)

data <- data.frame(var0,var1)

p <- ggplot(data,aes(var0,var1))+geom_path()
p

0 个答案:

没有答案