繁体   English   中英

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

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

用户@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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM