R ggplot中自定义发散颜色渐变的标签

R ggplot中自定义发散颜色渐变的标签,r,ggplot2,R,Ggplot2,我想绘制一些数据,其中我使用了发散色标的自定义变换。如图所示,标签很时髦,有时甚至一点也不时髦。我希望标签是四舍五入的,并显示颜色代表的值,而不是转换 我已经能够成功地将其应用于非负量表,我相信这与负数或逆调用trans_new有关,我从文档中不太了解: 以下是我浏览的一些链接: 看起来对我很有帮助 library(scales) library(tidyverse) log_both <- function(x){ifelse(x == 0, 0, log(abs(x)) *

我想绘制一些数据,其中我使用了发散色标的自定义变换。如图所示,标签很时髦,有时甚至一点也不时髦。我希望标签是四舍五入的,并显示颜色代表的值,而不是转换

我已经能够成功地将其应用于非负量表,我相信这与负数或
调用
trans_new
有关,我从文档中不太了解:

以下是我浏览的一些链接:

看起来对我很有帮助

library(scales)
library(tidyverse)

log_both <- function(x){ifelse(x == 0, 0, log(abs(x)) * sign(x))}

log_both_trans <- 
  function(){
    trans_new(name = 'log_both', 
              transform = log_both,
              inverse = log_both) #not clear what `inverse` does
  }

df <-
  tibble(y = (-10:10),
         x = (y^4)*sign(y))

ggplot(df) +
  #no transformation
    geom_point(aes(factor(x), y = 1, fill = x), shape = 21, size = 10) +
    scale_fill_gradient2(low = "blue", mid = "white", high = "red") +
  #transformed
    geom_point(aes(factor(x), y = - 1, color = x), size  = 10) +
    scale_color_gradient2(low = "blue", mid = "white", high = "red", trans = "log_both") +
  ylim(-2, 2) +
  labs(colour = "transformed", fill = "default", x = "", y = "")
库(比例)
图书馆(tidyverse)

log_tware参数
采用的函数是原始变换的数学逆。如果使用对数变换,则逆运算是指数运算。计算与所选打断相对应的标签时,需要使用相反的值。(记录变换以获得缩放数据,然后进行逆变换以获得标签。另请参见)

库(比例)
图书馆(tidyverse)
记录两者
library(scales)
library(tidyverse)

log_both <- function(x){ifelse(x == 0, 0, log(abs(x)) * sign(x))}
exp_both <- function(x){exp(abs(x)) * sign(x)} # this is the inverse of log_both

log_both_trans <- 
  function(){
    trans_new(name = 'log_both', 
              transform = log_both,
              inverse = exp_both)
  }

df <-
  tibble(y = (-10:10),
         x = (y^4)*sign(y))

ggplot(df) +
  #no transformation
  geom_point(aes(factor(x), y = 1, fill = x), shape = 21, size = 10) +
  scale_fill_gradient2(low = "blue", mid = "white", high = "red",
                       guide = guide_colorbar(order = 1)) +
  #transformed
  geom_point(aes(factor(x), y = - 1, color = x), size  = 10) +
  scale_color_gradient2(low = "blue", mid = "white", high = "red",
                        trans = "log_both",
                        breaks = c(-10000, -100, 0, 100, 10000), # desired breaks on transformed scale
                        guide = guide_colorbar(order = 2)) +
  ylim(-2, 2) +
  labs(colour = "transformed", fill = "default", x = "", y = "")