Home > database >  How to fix y scale to include the error bar in a bar plot?
How to fix y scale to include the error bar in a bar plot?

Time:07-04

I have a problem with the second column of the plot. The error bar showed incomplete. There is a way to fix this? I need that the plot be exactly as below. Here is the example code and the result. Thanks.

ggplot(data, aes(x = reorder(Treatment, -mean), y = mean, fill = Grapevine))  
  geom_col(aes(x = reorder(Treatment, -mean), y = mean),
    stat = "identity", position = "dodge"
  )  
  geom_errorbar(aes(
    x = reorder(Treatment, -mean), ymin = mean - se,
    ymax = mean   se
  ),
  width = 0.1,
  position = position_dodge(0.9)
  )  
  scale_y_cut(breaks = c(2.0E-09, 2.0E-08, 1.0E-07))  
  scale_y_continuous(breaks = c(0, 6.0e-09, 6.0e-08, 6.0e-07))  
  theme(
    line = element_line(
      colour = "black", size = 1,
      linetype = 1, lineend = "butt"
    ),
    rect = element_rect(
      fill = "white", colour = "black",
      size = 1, linetype = 1
    ),
    aspect.ratio = 0.6,
    plot.background = element_rect(fill = "white"), plot.margin = margin(1, 1, 1, 1, "cm"), axis.text = element_text(size = rel(2.5), colour = "#000000", margin = 1), strip.text = element_text(size = rel(0.8)), axis.line = element_blank(), axis.text.x = element_text(vjust = 0.2, angle = 90), axis.text.y = element_text(hjust = 1), axis.ticks = element_line(colour = "#000000", size = 1.2), axis.title.x = element_text(size = 30, vjust = 0.5), axis.title.y = element_text(size = 30, angle = 90), axis.ticks.length = unit(0.1, "cm"), legend.background = element_rect(colour = NA), legend.margin = unit(0.15, "cm"), legend.key = element_rect(fill = "grey95", colour = "white"), legend.key.size = unit(1.2, "lines"), legend.key.height = NULL, legend.key.width = NULL, legend.text = element_text(size = rel(2.0)), legend.text.align = NULL, legend.title = element_text(size = rel(2.0), face = "bold", hjust = 0), legend.title.align = NULL, legend.position = "right", legend.direction = NULL, legend.justification = "right", legend.box = NULL, panel.background = element_rect(
      fill = "#ffffff", colour = "#000000",
      size = 2, linetype = "solid"
    ), panel.border = element_rect(colour = "black", fill = NA, size = 2),
  )  
  ylab(expression(Lp[r] ~ (m ~ s^-1 ~ Mpa^-1)))  
  xlab(expression(Treatment))

bar plot

CodePudding user response:

We can explicitly set the plot's limits with lims(), but in this case it is more elegant to use expand_limits() which automatically adapts the limits to ensure that a certain value will be visible in the plot.

Examples:

ggplot(...)  
  geom_point()  
  expand_limits(y = 8.5e-7) # a manually hardcoded location
ggplot(...)  
  geom_point()  
  expand_limits(y = max(data$mean data$se) ) # a limit based on your actual data
  • Related