- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常在工作中使用箱线图,喜欢 ggplot2
美学。但标准geom_boxplot
缺少对我来说很重要的两件事: mustache 的末端和中间标签。多亏了这里的信息,我写了一个函数:
gBoxplot <- function(formula = NULL, data = NULL, font = "CMU Serif", fsize = 18){
require(ggplot2)
vars <- all.vars(formula)
response <- vars[1]
factor <- vars[2]
# A function for medians labelling
fun_med <- function(x){
return(data.frame(y = median(x), label = round(median(x), 3)))
}
p <- ggplot(data, aes_string(x = factor, y = response)) +
stat_boxplot(geom = "errorbar", width = 0.6) +
geom_boxplot() +
stat_summary(fun.data = fun_med, geom = "label", family = font, size = fsize/3,
vjust = -0.1) +
theme_grey(base_size = fsize, base_family = font)
return(p)
}
gBoxplot(hwy ~ class, mpg)
geom_boxplot
做一个新的geom会更好.我已阅读小插图
Extending ggplot2 ,但无法理解如何实现它。
最佳答案
所以一直在想这个问题。基本上,当你创建一个新的基元时,你通常会编写以下组合:
geom_errorbar
和 stat_boxplot
– 获取我们的误差条 geom_boxplot
和 stat_boxplot
- 创建箱线图 geom_label
和 stat_summary
- 在框的中心创建具有平均值的文本标签。 stat_summary
和
stat_boxplot
合而为一,三者
geom-protos 同样,这是用一层来做到这一点的。但除非我们有效率问题,否则没有什么意义。
geom_myboxplot <- function(formula = NULL, data = NULL,
stat = "boxplot", position = "dodge",coef=1.5,
font = "sans", fsize = 18, width=0.6,
fun.data = NULL, fun.y = NULL, fun.ymax = NULL,
fun.ymin = NULL, fun.args = list(),
outlier.colour = NULL, outlier.color = NULL,
outlier.shape = 19, outlier.size = 1.5,outlier.stroke = 0.5,
notch = FALSE, notchwidth = 0.5,varwidth = FALSE,
na.rm = FALSE, show.legend = NA,
inherit.aes = TRUE,...) {
vars <- all.vars(formula)
response <- vars[1]
factor <- vars[2]
mymap <- aes_string(x=factor,y=response)
fun_med <- function(x) {
return(data.frame(y = median(x), label = round(median(x), 3)))
}
position <- position_dodge(width)
l1 <- layer(data = data, mapping = mymap, stat = StatBoxplot,
geom = "errorbar", position = position, show.legend = show.legend,
inherit.aes = inherit.aes, params = list(na.rm = na.rm,
coef = coef, width = width, ...))
l2 <- layer(data = data, mapping = mymap, stat = stat, geom = GeomBoxplot,
position = position, show.legend = show.legend, inherit.aes = inherit.aes,
params = list(outlier.colour = outlier.colour, outlier.shape = outlier.shape,
outlier.size = outlier.size, outlier.stroke = outlier.stroke,
notch = notch, notchwidth = notchwidth, varwidth = varwidth,
na.rm = na.rm, ...))
l3 <- layer(data = data, mapping = mymap, stat = StatSummary,
geom = "label", position = position, show.legend = show.legend,
inherit.aes = inherit.aes, params = list(fun.data = fun_med,
fun.y = fun.y, fun.ymax = fun.ymax, fun.ymin = fun.ymin,
fun.args = fun.args, na.rm=na.rm,family=font,size=fsize/3,vjust=-0.1,...))
return(list(l1,l2,l3))
}
ggplot(mpg) +
geom_myboxplot( hwy ~ class, font = "sans",fsize = 18)+
theme_grey(base_family = "sans",base_size = 18 )
layer
函数,我们可以使用原始
stat_boxplot
,
geom_boxplot
, 和
stat_summary
在他们的位置调用。但是如果我们希望能够从我们的自定义箱线图中控制它们,我们仍然必须填写所有参数,所以我认为这样更清晰 - 至少从结构的角度而不是功能的角度来看.也许不是,这是一个品味问题......
关于r - 如何使用 ggproto 扩展 ggplot2 boxplot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876683/
我正在尝试制作新的几何图形和统计信息。我从这个 vignette 尝试了一个 StatChull 代码. 我的目标是操纵一个不是美学值(value)的外部参数。 像这样的东西: stat_custom
我经常在工作中使用箱线图,喜欢 ggplot2美学。但标准geom_boxplot缺少对我来说很重要的两件事: mustache 的末端和中间标签。多亏了这里的信息,我写了一个函数: gBoxplot
我正在使用 Deckjs 框架在 slidfy 中进行演示。一切都很好,但是突然出现了这段代码: ggplot(cars, aes(x = speed, y = dist)) + geom_poin
我正在使用 ggmap,并收到以下错误: Error: GeomRasterAnn was built with an incompatible version of ggproto. Please
我想创建一个新的 Geom 类型:geom_ohlc(),它类似于烛台图,用于绘制股票开盘-高-低-收盘数据。 学完这个Hadley's article :我试过这个: GeomOHLC 0 但希望
我是一名优秀的程序员,十分优秀!