たとえば、GeomBar
はGeomRect
の子クラスです。
class(GeomBar) #> [1] "GeomBar" "GeomRect" "Geom" "ggproto" "gg"
geomはいっぱいある感じするけど、実は内部的には10種類くらいだったりするのでは?という淡い期待を抱きつつ調べてみる。
library(ggplot2) e <- as.environment('package:ggplot2') geom_names <- ls(e, pattern = "^Geom") geoms <- lapply(geom_names, get, e) x <- purrr::keep(geoms, function(g) { # super() で親クラスを調べられる exists("super", g) && identical(is(g$super()), "Geom") }) purrr::map_chr(x, is) #> [1] "GeomAbline" "GeomBlank" "GeomBoxplot" "GeomCrossbar" #> [5] "GeomCustomAnn" "GeomDotplot" "GeomErrorbar" "GeomErrorbarh" #> [9] "GeomHex" "GeomHline" "GeomLabel" "GeomLinerange" #> [13] "GeomLogticks" "GeomPath" "GeomPoint" "GeomPointrange" #> [17] "GeomPolygon" "GeomRaster" "GeomRasterAnn" "GeomRect" #> [21] "GeomRibbon" "GeomRug" "GeomSegment" "GeomSf" #> [25] "GeomSmooth" "GeomText" "GeomViolin" "GeomVline"
けっこうある。うーん...