结合 geom_bin2d 在 ggplot 中获取相对计数,并正确使用 scale_fill_gradientn

Get relative count in ggplot combined with geom_bin2d, and proper use of scale_fill_gradientn

我正在使用由 var_X 和 var_Y 组成的 df 绘制二维图,使用 ggplot2 结合 geom_bin2d 和 scale_fill_gradientn,但我有两个问题需要解决.

(i) 我需要获得从 0 到 1 的 z(也在颜色条中)的相对计数,可能是通过将计数标准化为其最大值。

(ii) 对于绝对计数的时刻,最大计数似乎是 ~1600,如颜色条所示(颜色条范围从 ~0 到 ~1600),但绘图显示蓝色到绿色(或黄色)只有颜色,没有红色。

这是我的代码。

jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan","#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000"))
p<-ggplot(data.frame(df$var_X,df$var_Y), aes(df$var_X,df$var_Y)) + 
geom_bin2d()+ scale_x_continuous(trans=log_trans(), breaks=c(100,150, 200, 250))+
ylim(c(0, 200))+
scale_fill_gradientn(colours = jet.colors(7))
p

## or using ##
scale_fill_gradientn(colours = c("darkblue","lightblue", "green","yellow","red"))

我想 post 我的样本数据,但不知道如何做。有需要请告诉我

非常欢迎任何建议。

(i) 不清楚您希望如何规范化。一种方法是使用 'geom_bin2d(aes(fill = ..density..))',如下所示。

library(tidyverse)
library(scales)
df <- data.frame(var_X = runif(1000,0,1), var_Y = runif(1000,0,200))

jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan","#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000"))
p<-ggplot(df, aes(df$var_X,df$var_Y)) + 
  geom_bin2d(aes(fill = ..density..)) +
  scale_x_continuous(trans=log_trans(), breaks=c(100,150, 200, 250)) +
  ylim(c(0, 200)) +
  scale_fill_gradientn(colours = jet.colors(7))
p

如果您想要标准化以使最大 bin 值为 1,那么需要像这样的方法来工作 'geom_bin2d(aes(fill = ..ndensity..))'。这在 ggplot2 v3.0.0 中似乎是不可能的,但在这里讨论:https://github.com/tidyverse/ggplot2/issues/2679

(i) 这应该给出 1 的最大 bin 值。

library(tidyverse)
library(scales)
df <- data.frame(var_X = runif(1000,0,1), var_Y = runif(1000,0,200))

p<-ggplot(df, aes(df$var_X,df$var_Y)) + 
  geom_bin2d(aes(fill = stat(count/max(count)))) +
  scale_x_continuous(trans=log_trans(), breaks=c(100,150, 200, 250)) +
  ylim(c(0, 200)) +
  scale_fill_gradientn(colours = jet.colors(7))
p