显示ggplot2 hexbin图中每个bin的计数数

时间:2017-09-04 16:05:51

标签: r ggplot2 data-visualization

我正在开展一个模拟失踪船只移动的项目。我使用以下代码制作了分发图:

library("ggplot2")

a <- rnorm(1000, 30.2, 2)
b <- rnorm(1000, 10, 5)
y <- (x + a + b) * 0.6

df <- data.frame(x,y)
p <- ggplot(df,aes(x=x,y=y)) +  
  ggtitle("A Priori Map") + xlab("Longtitude") + ylab("Latitude") +
  scale_fill_gradientn(colors = topo.colors(10))

p + stat_binhex(show.legend = T, bins = 20)

这会生成如下地图:

A hexbin map

但是,我想用一种颜色来显示实际的数量,而不是显示使用颜色的计数数量。因此,如果程序“落在”特定点3次,它将显示“3”。

如何在R?

中完成

1 个答案:

答案 0 :(得分:5)

以下是如何向现有图表添加计数:

library(ggplot2)
theme_set(theme_bw())

set.seed(2)
a <- rnorm(1000, 30.2, 2)
b <- rnorm(1000, 10, 5)
x = rnorm(1000)
y <- (x + a + b) * 0.6

df <- data.frame(x,y)

p <- ggplot(df,aes(x=x,y=y)) +  
  ggtitle("A Priori Map") + 
  xlab("Longtitude") + ylab("Latitude") +
  scale_fill_gradientn(colors = topo.colors(10)) +
  stat_binhex(show.legend = T, bins = 20)

p + geom_text(stat="binhex", bins=20, aes(label=..count..), show.legend=FALSE,
              colour=hcl(15,100,60), fontface="bold", size=3.5)

enter image description here

要删除填充颜色,您可以执行以下操作:

ggplot(df,aes(x=x,y=y)) +  
  ggtitle("A Priori Map") + 
  xlab("Longtitude") + ylab("Latitude") +
  stat_binhex(bins = 20, fill=NA, colour="black") + 
  geom_text(stat="binhex", bins=20, aes(label=..count..), colour="red")

enter image description here

您还可以使用文字大小突出显示密度最高的区域:

ggplot(df,aes(x=x,y=y)) +  
  ggtitle("A Priori Map") + 
  xlab("Longtitude") + ylab("Latitude") +
  stat_binhex(show.legend = T, bins = 20, fill=NA, colour="grey70") + 
  geom_text(stat="binhex", bins=20, aes(label=..count.., size=..count..), colour="red") +
  scale_size_continuous(range=c(3,6)) +
  guides(size=FALSE)

enter image description here

在没有hex-grid的情况下也能正常工作:

ggplot(df,aes(x=x,y=y)) +  
  ggtitle("A Priori Map") + 
  xlab("Longtitude") + ylab("Latitude") +
  geom_text(stat="binhex", bins=20, aes(label=..count.., size=..count..), colour="red") +
  scale_size_continuous(range=c(3,6)) +
  guides(size=FALSE)

enter image description here