r - 如何分离条形图?
问题描述
我正在尝试绘制一个代表双向方差分析的条形图,但是条形图重叠,有没有人知道以这种方式绘制数据集的简单方法?
data <- structure(list(nozzle = c("XR", "XR", "XR", "XR", "XR", "XR", "XR", "XR",
"XR", "XR", "XR", "XR", "XR", "XR", "XR", "XR",
"AIXR", "AIXR", "AIXR", "AIXR", "AIXR", "AIXR",
"AIXR", "AIXR", "AIXR", "AIXR", "AIXR", "AIXR",
"AIXR", "AIXR", "AIXR", "AIXR"),
trat = c("Cle 12.8", "Cle 12.8", "Cle 12.8", "Cle 12.8",
"Cle 34", "Cle 34", "Cle 34", "Cle 34", "Cle 12.8",
"Cle 12.8", "Cle 12.8", "Cle 12.8", "Cle 34", "Cle 34",
"Cle 34", "Cle 34", "Cle 12.8", "Cle 12.8", "Cle 12.8",
"Cle 12.8", "Cle 34", "Cle 34", "Cle 34", "Cle 34",
"Cle 12.8", "Cle 12.8", "Cle 12.8", "Cle 12.8", "Cle 34",
"Cle 34", "Cle 34", "Cle 34"),
adj = c("Without", "Without", "Without", "Without", "Without",
"Without", "Without", "Without", "With", "With", "With",
"With", "With", "With", "With", "With", "Without", "Without",
"Without", "Without", "Without", "Without", "Without", "Without",
"With", "With", "With", "With", "With", "With", "With", "With"),
dw1 = c(3.71, 5.87, 6.74, 1.65, 0.27, 0.4, 0.37, 0.34, 0.24, 0.28, 0.32,
0.38, 0.39, 0.36, 0.32, 0.28, 8.24, 10.18, 11.59, 6.18, 0.2, 0.23,
0.2, 0.31, 0.28, 0.25, 0.36, 0.27, 0.36, 0.37, 0.34, 0.19)),
row.names = c(NA, -32L),
class = c("tbl_df", "tbl", "data.frame"))
data_sum <- summarySE(data,
measurevar="dw1",
groupvars=c("nozzle", "trat","adj"))
ggplot(data_sum,
aes(x = as.factor(trat), y = dw1,group = as.factor(nozzle), fill = as.factor(adj),
ymax=dw1+se, ymin=dw1-se)) +
geom_bar(stat="identity", colour = "black", width = 0.2, show_guide = FALSE, position="dodge") +
scale_fill_manual(name = "Presence of adjuvants" ,
values = c('grey80', 'grey30'),
labels = c("Without",
"With")) +
geom_errorbar(position=position_dodge(width=0.7),
width=0.0, size=0.5, color="black") +
labs(x = "Treatment g.i.a. ha-¹",
y = "Dry Mass (g)") +
theme_classic()+ facet_grid(nozzle ~ ., scales = "free_y")
我期待这样的事情:
但是在同一个图中有两个因素和一个共同的 Y 轴。
解决方案
您的代码的问题是您需要使用该函数dodge2
而不是dodge
. 请参阅此参考。这是可以帮助您的代码。
ggplot(data_sum ,aes( x = trat, y = dw1, group = nozzle, fill = adj)) +
geom_bar( colour = "black", width = 0.5, stat="identity",
# Position dodge2 solve the overlapping problem
# (padding) Add distance between bar in the same group
position = position_dodge2(padding = 0.5)) +
scale_fill_manual(name = "Presence of adjuvants",
values = c('grey80', 'grey30'),
labels = c("Without",
"With")) +
geom_errorbar(aes(ymax = dw1 + se, ymin = dw1 - se),
# Need to be consistent with bar position
# (padding) Here it will control the width of
# top and botton horizontal line. If you want
# you can choose padding = 1 to not have those lines
position = position_dodge2(padding = 1.3),
# (width) Control the width of error_bar and
# in this case has a side effect of shift the
# position of this error bar.
# Then this width need to be the same of geom_bar
width = 0.5,
size = 0.5,
color="black") +
labs(x = "Treatment g.i.a. ha-¹",
y = "Dry Mass (g)") +
facet_grid(. ~ nozzle, scales = "free_y")
推荐阅读
- java - 从数组字符串中的最后一个元素中删除逗号
- python - 在 micro python 中连接到 Wifi 挂起
- git - 将更改从开发合并到主分支的更好方法是什么?
- css - Primeng angular 7 - css没有被应用
- java - Twitter4j TwitterFactory 类未找到异常
- kubernetes - 关于 Kubernetes 版本之间升级的愚蠢问题
- android - 如何动态地从 addView() 方法获取每个视图?
- android - 在 FragmentActivity 中加载 Google 地图时应用程序崩溃
- python - 不能将 2 个项目添加到括号中的列表中
- postgresql - CROSS JOIN 可以“隐式横向”吗?