【问题标题】:Asymmetric midpoint in scale_fill_gradient2 results with trimmed color on the shorter edgescale_fill_gradient2 中的不对称中点导致较短边缘上的颜色被修剪
【发布时间】:2018-08-11 12:02:07
【问题描述】:

这是我尝试修改的起始示例:

library(reshape2)

data <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(data),2)
melted_cormat <- melt(cormat, na.rm = TRUE)

ggplot(
  data = melted_cormat,
  aes(Var1, Var2, fill=value)
) +
  geom_tile() +
  geom_text(
    aes(Var2, Var1, label = value)
  ) +
  scale_fill_gradient2(
    low = 'red',
    high = 'blue',
    mid = 'white', 
    midpoint = 0, # <-- look at this
    limit = c(-1, 1)
  ) 

这段代码创建了一个情节:

但是当我将唯一的中点更改为midpoint = -0.5 时,情节看起来像:

在我看来,输出不正确,因为我明确说明了low = 'red',并且图中的最低值颜色介于红色和白色之间。

我正在寻找一种解决方案,如何保持 midpoint = -0.5 以及从 -1(红色)到 -0.5(白色)的完整渐变。

【问题讨论】:

    标签: r ggplot2 data-visualization


    【解决方案1】:

    解决方案给出here

    library(reshape2)
    library(scales)
    data <- mtcars[, c(1,3,4,5,6,7)]
    cormat <- round(cor(data),2)
    melted_cormat <- melt(cormat, na.rm = TRUE)
    
    ggplot(
      data = melted_cormat,
      aes(Var1, Var2, fill=value)
    ) +
      geom_tile() +
      geom_text(
        aes(Var2, Var1, label = value)
      ) +
      scale_fill_gradientn(
       colors=c("red","white","blue"),
       values=rescale(c(-1,-0.5,1)),
       limits=c(-1,1)
      )
    

    【讨论】:

    • 太棒了!现在我知道scale_fill_gradientn 可以做到这一点,但我仍在调查为什么midpointscale_fill_gradient2 中不对称时highlow 如此混乱。
    • @Everettss 好的。我明白。 scale_fill_gradient2 函数使用 scales 包的重定标器 rescale_mid。我认为了解它的工作原理可能会很有趣:rescale_mid(seq(-1,1,length.out=11),c(0,1),c(-1,1),0)rescale_mid(seq(-1,1,length.out=11),c(0,1),c(-1,1),-0.5)。另见:scales:::rescale_mid.numeric
    猜你喜欢
    • 2020-02-14
    • 2010-11-30
    • 1970-01-01
    • 2020-08-19
    • 2016-03-04
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多