Kas*_*any 5 r ggplot2 aesthetics geom-bar
[在帖子末尾生成情节的数据和代码]
使用ggplot,我绘制了带有误差线的条形图,条按两个因素分组(一个在X轴上,一个在填充)。我想增加x轴上各组之间的绿色距离,以使图更易于阅读:

我在这里找到了与stackoverflow解决方案最接近的东西(有人在一个未答复的评论中问了我的问题),在这里,这里,但是我没有设法在不增加错误栏的情况下应用这些东西。有人可以指出我要调整的正确参数吗?
数据:
structure(list(Condition = c("Difficult", "Easy", "Difficult",
"Easy", "Difficult", "Easy", "Difficult", "Easy", "Easy", "Difficult",
"Easy", "Difficult"), Measure = c("Competence", "Competence",
"Value", "Value", "Interest", "Interest", "JOL", "JOL", "Difficulty",
"Difficulty", "Effort", "Effort"), mean = c(5.5, 4.72, 4.04,
5.39, 3.51, 3.77, 4.34, 4.61, 3.51, 1.51, 3.44, 1.73), sd = c(1.26,
1.62, 1.94, 1.34, 1.46, 1.46, 1.73, 1.68, 1.5, 0.86, 1.53, 1.1
), se = c(0.14, 0.18, 0.22, 0.15, 0.16, 0.16, 0.19, 0.19, 0.17,
0.1, 0.17, 0.12), s.size = c(80, 80, 80, 80, 80, 80, 80, 80,
80, 80, 80, 80)), .Names = c("Condition", "Measure", "mean",
"sd", "se", "s.size"), row.names = c(NA, -12L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
这是:
Condition Measure mean sd se s.size
1 Difficult Competence 5.50 1.26 0.14 80
2 Easy Competence 4.72 1.62 0.18 80
3 Difficult Value 4.04 1.94 0.22 80
4 Easy Value 5.39 1.34 0.15 80
5 Difficult Interest 3.51 1.46 0.16 80
6 Easy Interest 3.77 1.46 0.16 80
7 Difficult JOL 4.34 1.73 0.19 80
8 Easy JOL 4.61 1.68 0.19 80
9 Easy Difficulty 3.51 1.50 0.17 80
10 Difficult Difficulty 1.51 0.86 0.10 80
11 Easy Effort 3.44 1.53 0.17 80
12 Difficult Effort 1.73 1.10 0.12 80
Run Code Online (Sandbox Code Playgroud)
我用来作图的代码(对不起,我正在学习如何使用ggplot并发现做笔记会有所帮助)
library(ggplot2)
ggplot(DF, aes(x=Measure, y=mean,fill=Condition)) +
geom_bar(stat="identity",
colour="black", # Black outline for all
position=position_dodge())+# Put bars side-by-side instead of stacked
geom_errorbar(aes(ymin=mean-se, ymax=mean+se),
position=position_dodge(.9),
width=.25)+
#order the groups on the xaxis
scale_x_discrete(limits = c("Interest", "Value","Effort","Difficulty","Competence","JOL"))+
coord_cartesian(ylim=c(0,7)) +
#change color of bars
scale_fill_manual(values=c("#ffcc00ff","#ffffff"), name = "Condition") +
#change ticks on yaxis
scale_y_continuous(breaks=seq(0,7,by =1)) +
geom_hline(yintercept=0) +
geom_vline(xintercept=0)+
theme_bw()+
labs(x="", y = "Rating (0-7)")+
theme(axis.line.y = element_line(color="black"),
axis.title.y = element_text(margin = margin(r=8)),
axis.title.x = element_text(margin = margin(r=25)),
panel.background = element_rect(fill = NA),
panel.grid.major = element_blank(),
panel.border = element_blank())
Run Code Online (Sandbox Code Playgroud)
感谢大家的思考和 AntoniosK 提供的这个问题的链接,这帮助我找到了一个适合我的解决方案(虽然感觉有点老套):手动更改条形的宽度,调整纵横比(绘图的宽度与高度) )在主题中,调整误差条中的position_dodge以匹配条的宽度:
geom_bar(width = 0.7)
theme(aspect.ratio = 3/5)
geom_errorbars(position=position_dodge(.7))
Run Code Online (Sandbox Code Playgroud)
(我还将图例移到了图的顶部,在屏幕截图中不可见)
什么事啊 1.使用geom_col而不是geom_bar按照建议使用。2.指定合适的position_dodge(0.5)并且width=0.53.删除不必要的代码。
ggplot(d, aes(x=Measure, y=mean, fill=Condition)) +
geom_col(colour="black",width=0.5,
position=position_dodge(0.5)) +
geom_errorbar(aes(ymin=mean-se, ymax=mean+se),
position=position_dodge(0.5), width=.25)+
scale_x_discrete(limits = c("Interest", "Value","Effort","Difficulty","Competence","JOL")) +
scale_y_continuous(breaks=seq(0,7,by =1),limits = c(0,7), expand = c(0,0))+
scale_fill_manual(values=c("#ffcc00ff","#ffffff"), name = "Condition") +
labs(x="", y = "Rating (0-7)")+
theme_minimal() +
theme(axis.line = element_line(color="black"),
axis.ticks = element_line(color="black"),
panel.border = element_blank())
Run Code Online (Sandbox Code Playgroud)