当前位置:  开发笔记 > 编程语言 > 正文

ggplot2 2.0 new stat_ function:设定给定美学的默认比例

如何解决《ggplot22.0newstat_function:设定给定美学的默认比例》经验,为你挑选了0个好方法。

我尝试在R中使用ggplot2的新功能,允许创建我们自己的stat_函数.我正在创建一个简单的计算和绘制排列在2d数组上的点之间的插值表面.

我想创建一个stat_topo()要求x,y以及val美学,绘制简单的geom_raster内插的val映射fill.

library(ggplot2)
library(dplyr)
library(akima)

cpt_grp <- function(data, scales) {
  #interpolate data in 2D
  itrp <- akima::interp(data$x,data$y,data$val,linear=F,extrap=T)
  out <- expand.grid(x=itrp$x, y=itrp$y,KEEP.OUT.ATTRS = F)%>%
    mutate(fill=as.vector(itrp$z))
  # str(out)
  return(out)
}

StatTopo <- ggproto("StatTopo", Stat,
                    compute_group = cpt_grp,
                    required_aes = c("x","y","val")
)
stat_topo <- function(mapping = NULL, data = NULL, geom = "raster",
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatTopo, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

set.seed(1)
nchan <- 30
d <- data.frame(val = rnorm(nchan), # some random values to be mapped to fill color
         x = 1:nchan*cos(1:nchan), # the x and y position of the points to interpolate
         y = 1:nchan*sin(1:nchan))
plot(d$x,d$y)

ggplot(d,aes(x=x,y=y,val=val)) +
  stat_topo() +
  geom_point()

当我运行它时,我收到以下错误:

Error: numerical color values must be >= 0, found -1

据我所知,这是因为某种程度上fill美学的规模被设定为离散的.

如果我输入:

ggplot(d,aes(x=x,y=y,val=val)) +
  stat_topo() +
  scale_fill_continuous() +
  geom_point()

我得到了我想要的东西:具有连续色标的预期光栅,我希望默认情况下stat_这样做...

在此输入图像描述

所以我想问题是:如何防止ggplot在这里设置离散比例,理想情况下在我的新stat_函数调用中设置默认比例.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有