我有可以使用以下命令粗略复制的数据
n = 10
df = data.frame(
val= rnorm(n),
var1 = rbinom(n, 1, 0.5),
var2 = rbinom(n, 1, 0.5),
var3 = rbinom(n, 1, 0.5))我如何在箱形图上绘制这个?我正在寻找的是x轴上的var1、var2和var3以及y轴上的val,即var1的盒子和胡须将只包含在var1列中具有1的观察值。
我试过了
df2 = melt(df, id.vars = c('val'),
variable.name ='vars', value.name = "include")
ggplot(df2, aes(x = include, y = val)) + geom_boxplot(aes(fill = vars)但是当我绘制这个的时候,我得到了3个看起来完全一样的箱形图。
我哪里错了?
发布于 2020-03-06 21:09:58
在基数R中,我们可以做
boxplot(sapply(df[-1], function(x) df$val[as.logical(x)]))

或者使用ggplot2
df.r <- do.call(rbind, lapply(names(df)[-1], function(x)
data.frame(x, y=df$val[as.logical(df[,x])])))
library(ggplot2)
ggplot(df.r, aes(x=x, y=y)) + geom_boxplot(aes(fill=y))

数据
df <- structure(list(val = c(1.37095844714667, -0.564698171396089,
0.363128411337339, 0.63286260496104, 0.404268323140999, -0.106124516091484,
1.51152199743894, -0.0946590384130976, 2.01842371387704, -0.062714099052421
), var1 = c(1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L), var2 = c(1L,
1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L), var3 = c(0L, 0L, 0L, 1L,
0L, 1L, 1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA,
-10L))发布于 2020-03-06 21:30:30
这些框都是相同的,因为图形没有考虑include向量。这是由ggplot的data参数中的subset指令处理的。
library(ggplot2)
ggplot(subset(df2, include != 0), aes(vars, val)) +
geom_boxplot()

数据创建代码。
我正在重新发布设置RNG种子的数据创建代码。
set.seed(1234)
n = 10
df = data.frame(
val= rnorm(n),
var1 = rbinom(n, 1, 0.5),
var2 = rbinom(n, 1, 0.5),
var3 = rbinom(n, 1, 0.5))
df
df2 <- reshape2::melt(df, id.vars = c('val'),
variable.name ='vars', value.name = "include")https://stackoverflow.com/questions/60564637
复制相似问题