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

时间:2018-08-23 01:57:27

标签: r ggplot2 normalization bin

我正在将ggplot2与geom_bin2d和scale_fill_gradientn结合使用由var_X和var_Y组成的df绘制2d图,但是我有两个问题需要解决。

(i)我需要将z的相对计数(也在彩条中)从0变为1,可能是通过将计数标准化为最大值来实现的。

(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"))

我想发布我的样本数据,但是不知道该怎么做。请让我知道是否需要。

任何建议都会受到欢迎。

2 个答案:

答案 0 :(得分:0)

(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

答案 1 :(得分:0)

(i)这应该使bin的最大值为1。

Sensor System