我想将几个变量(此处为X1
和X2
)的分布与单个值(此处为bm
)进行比较。问题是这些变量太多(大约十几个)使用单个箱图。
另外,使用一个图表的级别太不同了。我需要使用方面来使事情更有条理:
然而,对于此图,我的基准类别(bm
)(X1
和X2
中的单个值)未出现在X1
中,似乎有几个X2
中的值。我希望它只是这条绿线,它在第一个情节中。任何想法为什么会改变?有什么好的解决方法吗?我尝试了facet_wrap
/ facet_grid
的选项,但没有提供正确的结果。
我还尝试将条形图与bm
和三个空类别与箱形图组合。但首先它看起来很糟糕,其次它同样搞砸了。基本上任何工作都会有所帮助。
在代码下方创建此处显示的最小示例:
# Creating some sample data & loading libraries
library(ggplot2)
library(RColorBrewer)
set.seed(10111)
x=matrix(rnorm(40),20,2)
y=rep(c(-1,1),c(10,10))
x[y==1,]=x[y==1,]+1
x[,2]=x[,2]+20
df=data.frame(x,y)
# creating a benchmark point
benchmark=data.frame(y=rep("bm",2),key=c("X1","X2"),value=c(-0.216936,20.526312))
# melting the data frame, rbinding it with the benchmark
test_dat=rbind(tidyr::gather(df,key,value,-y),benchmark)
# Creating a plot
p_box <- ggplot(data = test_dat, aes(x=key, y=value,color=as.factor(test_dat$y))) +
geom_boxplot() + scale_color_manual(name="Cluster",values=brewer.pal(8,"Set1"))
# The first line delivers the first plot, the second line the second plot
p_box
p_box + facet_wrap(~key,scales = "free",drop = FALSE) + theme(legend.position = "bottom")
答案 0 :(得分:1)
问题只在于test_dat$y
在颜色aes
中的使用。永远不要在$
中使用aes
,ggplot会搞砸。
无论如何,如果您使用geom_hline
作为基准,而不是在单一值框图中进行黑客攻击,我认为您的情节会有所改善:
library(ggplot2)
library(RColorBrewer)
ggplot(tidyr::gather(df,key,value,-y)) +
geom_boxplot(aes(x=key, y=value, color=as.factor(y))) +
geom_hline(data = benchmark, aes(yintercept = value), color = '#4DAF4A', size = 1) +
scale_color_manual(name="Cluster",values=brewer.pal(8,"Set1")) +
facet_wrap(~key,scales = "free",drop = FALSE) +
theme(legend.position = "bottom")