如何分离条形图?

How to separate bar plot?

我正在尝试绘制代表双向方差分析的条形图,但条形重叠,有人知道以这种方式绘制数据集的简单方法吗?

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。看到这个 reference。这是可以帮助您的代码。

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")