我已经绘制了分组的箱形图,现在我想用白线代替标准的黑色中线,同时保持边框为另一种颜色.我正在按照Minimalist Boxplots网站上的说明进行操作,因为我非常喜欢他们的风格.
他们使用命令stat_summary(geom = "crossbar", width=0.65, fatten=0, color="white", fun.data = function(x){ return(c(y=median(x), ymin=median(x), ymax=median(x))) }).该命令适用于简单的箱形图:

但是现在我正在尝试在我的分组箱图上使用它,它不再工作了(缺少白色中线):
这是我复制数据的代码:
Data <- data.frame(
W = sample(1:100),
M = sample(1:100),
A = sample(1:100),
O = sample(1:100),
Type = sample(c("1", "2", "3", "4", "5")))
Run Code Online (Sandbox Code Playgroud)
我的剧本:
Data_Boxplot <- melt(Data,id.vars='Type', measure.vars=c('W','M','A', 'O'))
Boxplots <- ggplot(Data_Boxplot, aes(Type, value, group=variable)) +
geom_boxplot(outlier.colour = NULL, aes(color=variable, fill=variable)) +
stat_summary(geom = "crossbar", width=0.65, fatten=0, color="white",
fun.data = function(x){c(y=median(x), ymin=median(x), ymax=median(x))})
Boxplots
Run Code Online (Sandbox Code Playgroud)
我需要改变什么?非常感谢您的帮助.
你只映射x和y为geom_boxplot.应该为所有人映射在地理位置之间共享的变量.在这种情况下,您还需要分组variable.
ggplot(Data.m, aes(Type, value, group=variable) +
geom_boxplot(outlier.colour = NULL, aes(color=variable, fill=variable)) +
stat_summary(geom = "crossbar", width=0.65, fatten=0, color="white",
fun.data = function(x){c(y=median(x), ymin=median(x), ymax=median(x))})
Run Code Online (Sandbox Code Playgroud)
我没有测试,因为你没有提供数据.
好的,现在我们有一个很好的数据示例,我们可以看到发生了什么.
实际上我错过了两个问题.两者都是因为geom_boxplot会自动解决因为你的一些问题fill,是stat_summary没有.所以我们必须手动完成它们.
首先,我们希望被两个分组variable,以及Type,我们可以通过做这个interaction功能.
其次,箱形图被自动躲避(即在组内移动),而水平线则不是.我们将使用定义我们的定位position_dodge,并将其应用于两个geoms.将它应用于两者是使它们完全对齐的最简单方法.我们最终得到:
p <- position_dodge(0.8)
ggplot(Data_Boxplot, aes(Type, value, group = interaction(variable, Type))) +
geom_boxplot(aes(color = variable, fill = variable), outlier.colour = NULL, position = p) +
stat_summary(geom = "crossbar", width = 0.6, fatten=0, color="white", position = p,
fun.data = function(x){c(y=median(x), ymin=median(x), ymax=median(x))}) +
theme_minimal()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |