R:创建中断以填充 ggplot2 的 geom_tile 函数

R: Creating breaks to fill geom_tile function of ggplot2

有一种方法可以使用

在 ggplot2 的 stat_contour() 函数中简单地创建中断
stat_contour(breaks = ...)

不幸的是,我发现,同样不能应用于 geom_tile() 函数。有一种方法可以部分解决这个问题,使用 cut() 函数创建可以填充的部分,例如

data$br <- cut(data$z, breaks=seq(...))
ggplot(data, aes(x,y,z)) + geom_tile(aes(fill=br))

这会在图中创建一个图例,该图例显示间隔,而不是单个值。有没有更简单的方法来使用类似于 breaks 的东西来填充瓷砖?

用户 @jlhoward 可以找到使用 cut() 函数实现填充部分的方法,它会产生以下结果:

x<-seq(1,11,.03)                    # note finer grid
y<-seq(1,11,.03)
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y}
gg <- expand.grid(x=x,y=y)
gg$z <- with(gg,xyz.func(x,y))      # need long format for ggplot
library(ggplot2)
library(RColorBrewer)               #for brewer.pal()
brks <- cut(gg$z,breaks=seq(0,100,len=6))
brks <- gsub(","," - ",brks,fixed=TRUE)
gg$brks <- gsub("\(|\]","",brks)  # reformat guide labels
ggplot(gg,aes(x,y)) + 
  geom_tile(aes(fill=brks))+
  scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+
  scale_x_continuous(expand=c(0,0))+
  scale_y_continuous(expand=c(0,0))+
  coord_fixed()

这个例子并不能完全满足我的需要,我不希望图例中有间隔(另外,值是降序而不是升序,我似乎不明白为什么)。

如有任何帮助,我们将不胜感激!

如果我没理解错的话,你只是希望刻度标签固定,刻度反转。在@jlhoward 之前的出色工作之后,这很简单。

我们想更改标签,所以我使用 strsplit 删除范围 ID。我们想翻转图例,所以我使用 guide = guide_legend(reverse=TRUE):

x<-seq(1,11,.03)                    # note finer grid
y<-seq(1,11,.03)
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y}
gg <- expand.grid(x=x,y=y)
gg$z <- with(gg,xyz.func(x,y))      # need long format for ggplot
library(ggplot2)
library(RColorBrewer)               #for brewer.pal()
brks <- cut(gg$z,breaks=seq(0,100,len=6))
brks <- gsub(","," - ",brks,fixed=TRUE)
gg$brks <- sapply(brks, function(x){strsplit(x, "[( ]")[[1]][[2]]})
ggplot(gg,aes(x,y)) + 
  geom_tile(aes(fill=brks))+
  scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"), guide = guide_legend(reverse=TRUE))+
  scale_x_continuous(expand=c(0,0))+
  scale_y_continuous(expand=c(0,0))+
  coord_fixed()