首页 > 解决方案 > 如何分离条形图?

问题描述

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

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 轴。

标签: rggplot2statistical-test

解决方案


您的代码的问题是您需要使用该函数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")

在此处输入图像描述


推荐阅读