2

ggplot2 の GeomBoxplotDark 環境を使用しています: 複数のカラー スケールまたは異なるレイヤーで体系​​的に色をシフトしますか?

ただし、ggplot2 は proto から ggproto に移行したため、これは機能しなくなりました。

具体的なコードは次のとおりです。

require(ggplot2)

GeomBoxplotDark <- proto(ggplot2:::GeomBoxplot,
  draw <- function(., data, ..., outlier.colour = "black", outlier.shape = 16, outlier.size = 2) {
defaults <- with(data, {                               # ** OPENING "{" ADDED **
cols_dk <- rgb2hsv(col2rgb(colour)) - c(0, 0, 0.2)     # ** LINE ADDED        **
cols_dk <- hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,])  # ** LINE ADDED        **
data.frame(x = x, xmin = xmin, xmax = xmax,
  colour = cols_dk,                                    # ** EDITED, PASSING IN cols_dk **
  size = size,
  linetype = 1, group = 1, alpha = 1,
  fill = alpha(fill, alpha),
  stringsAsFactors = FALSE
)})                                                    # ** CLOSING "}" ADDED **
defaults2 <- defaults[c(1,1), ]

if (!is.null(data$outliers) && length(data$outliers[[1]] >= 1)) {
  outliers_grob <- with(data,
    GeomPoint$draw(data.frame(
      y = outliers[[1]], x = x[rep(1, length(outliers[[1]]))],
      colour=I(outlier.colour), shape = outlier.shape, alpha = 1,
      size = outlier.size, fill = NA), ...
    )
  )
} else {
  outliers_grob <- NULL
}

with(data, ggname(.$my_name(), grobTree(
  outliers_grob,
  GeomPath$draw(data.frame(y=c(upper, ymax), defaults2), ...),
  GeomPath$draw(data.frame(y=c(lower, ymin), defaults2), ...),
  GeomRect$draw(data.frame(ymax = upper, ymin = lower, defaults), ...),
  GeomRect$draw(data.frame(ymax = middle, ymin = middle, defaults), ...)
)))
  }
) 

次のエラーが表示されます: _inheritggproto オブジェクトである必要があります。

私の質問は、ggproto で環境を作成できるように、このエラーをどのように解決できますか? よろしくお願いします。

4

1 に答える 1