gpt4 book ai didi

r - 如何在箱线图中绘制与水平箱线图平行的条形图以及箱线图中的面积分数?

转载 作者:行者123 更新时间:2023-12-02 20:10:03 25 4
gpt4 key购买 nike

我正在研究数据呈现,我需要并行绘制箱线图和堆叠条形图。

enter image description here

用不同深浅的颜色和点覆盖面积的比例进行着色。我怎样才能绘制它?

最佳答案

这是一个通用解决方案,您可以使用它向格子弓形图添加平行百分比框。它计算描述箱线图部分( mustache 和主要部分)的精确百分比。

该解决方案基于 grid 包。使用lattice进行视口(viewport)操作比ggplot2更容易,这就是我选择bwplot的原因。

我生成一些示例数据:

df <- data.frame(cond = factor( rep(c("A"), each=200) ), 
rating = c(rnorm(200),rnorm(200, mean=.8)))

library(lattice)
bwplot(cond ~ rating, data=df,gp=gpar(fill='blue'),
par.settings = list( box.umbrella=list(col= c( "red")),
box.dot=list(col= c("green")),
box.rectangle = list(fill= c( "blue"),alpha=0.6)))

我捕捉到主视口(viewport)

downViewport("plot_01.panel.1.1.vp")

然后我存储 mustache 的尺寸和四肢箱线图位置的位置。

segs <- grid.get('segments',grep=T)
cap.segs <- grid.get('cap.segments',grep=T)

函数drawBox,绘制一个矩形,其中文本以百分比表示。我为每个盒子调用 3 次。

drawbox <- function(x0 = segs$x0[1] , col ='red',
width.vp = segs$x0[2] - segs$x0[1]){
vpd <- viewport(
x = x0 ,
y = cap.segs$y1[2] + unit(0.5,'native'),
width = width.vp,
height = unit(2,'cm'),
just = c('left','bottom'),
name = 'vpd')
pushViewport(vpd)
grid.rect(gp=(gpar(fill=col)))
# The compute of percent is a little bit tricky due we can't apply '/'
value <- as.numeric(convertUnit(width.vp,'native'))
value <- value/as.numeric(convertUnit(cap.segs$x0[2]- cap.segs$x0[1],'native'))
grid.text(label = paste(round(value*100),'%',sep='') , gp= gpar(cex=3))
upViewport(1)
}

函数drawbox被调用3次:

drawbox()
drawbox(col='yellow',width=segs$x0[1] - cap.segs$x0[1], x0= cap.segs$x0[1])
drawbox(col='green',width.vp= cap.segs$x0[2]- segs$x0[2],x0 = segs$x0[2])

enter image description here

关于r - 如何在箱线图中绘制与水平箱线图平行的条形图以及箱线图中的面积分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13927473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com