我正在尝试制作一个2D直方图,其中各个分档显示了bin内容和渐变。数据是两个轴中从0到4(仅)的整数。
我尝试过使用this answer,但我最终遇到了一些问题。首先,几个箱子最终没有任何梯度。在下面的MWE中,130和60左下方的箱子似乎是空白的。其次,箱子在两个轴上都移动到0以下。对于这个轴问题,我发现我可以简单地在x和y上添加0.5。最后,我还想让轴标签在一个箱子中居中,并添加0.5不能解决这个问题。
library(ggplot2)
# Construct the data to be plotted
x <- c(rep(0,190),rep(1,50),rep(2,10),rep(3,40))
y <- c(rep(0,130),rep(1,80),rep(2,30),rep(3,10),rep(4,40))
data <- data.frame(x,y)
# Taken from the example
ggplot(data, aes(x = x, y = y)) +
geom_bin2d(binwidth=1) +
stat_bin2d(geom = "text", aes(label = ..count..), binwidth=1) +
scale_fill_gradient(low = "snow3", high = "red", trans = "log10") +
xlim(-1, 5) +
ylim(-1, 5) +
coord_equal()
在颜色渐变和轴标签上是否有明显的错误?如果有更好的方法与其他包/命令一起使用,我也没有与ggplot或stat_bin2d结婚。提前谢谢!
答案 0 :(得分:2)
stat_bin2d
使用cut
函数创建分档。默认情况下,cut
会创建在左侧打开并在右侧关闭的容器。 stat_bin2d
也会设置include.lowest=TRUE
,以便最左边的间隔也会关闭。我还没有查看stat_bin2d
的代码,试图弄清楚到底出了什么问题,但它似乎与breaks
cut
的方式有关。正在被选中。在任何情况下,您都可以通过将bin中断明确设置为从-1开始来获得所需的行为。例如:
ggplot(data, aes(x = x, y = y)) +
geom_bin2d(breaks=c(-1:4)) +
stat_bin2d(geom = "text", aes(label = ..count..), breaks=c(-1:4)) +
scale_fill_gradient(low = "snow3", high = "red", trans = "log10") +
xlim(-1, 5) +
ylim(-1, 5) +
coord_equal()
要将切片居中于整数格点上,请将间隔设置为半整数值:
ggplot(data, aes(x = x, y = y)) +
geom_bin2d(breaks=seq(-0.5,4.5,1)) +
stat_bin2d(geom = "text", aes(label = ..count..), breaks=seq(-0.5,4.5,1)) +
scale_fill_gradient(low = "snow3", high = "red", trans = "log10") +
scale_x_continuous(breaks=0:4, limits=c(-0.5,4.5)) +
scale_y_continuous(breaks=0:4, limits=c(-0.5,4.5)) +
coord_equal()
或者,为了强调值是离散的,将容器设置为半个单位宽度:
ggplot(data, aes(x = x, y = y)) +
geom_bin2d(breaks=seq(-0.25,4.25,0.5)) +
stat_bin2d(geom = "text", aes(label = ..count..), breaks=seq(-0.25,4.25,0.5)) +
scale_fill_gradient(low = "snow3", high = "red", trans = "log10") +
scale_x_continuous(breaks=0:4, limits=c(-0.25,4.25)) +
scale_y_continuous(breaks=0:4, limits=c(-0.25,4.25)) +
coord_equal()