Changing colours of bars in ggplot2

From the plot above, does anyone have any advice on how to:

  1. Change the y-axis so that it starts at 1 (thus eliminating the white space below the bars), and
  2. Change the bar colors so that C1in1 is midnight blue, C1In2 is blue, C1Out is lightblue, C2In is red, C2Out is pink, C3In is darkgreen, and C3Out is lightgreen

TIA.

Here is my code.

library(lubridate)
library(ggplot2)
mydata = structure(list(Date = c("2022-08-05", "2022-08-18", "2022-02-23", 
                                 "2022-09-09", "2022-09-25", "2022-10-12", "2022-11-06", "2023-04-29", 
                                 "2023-05-19", "2023-06-24", "2023-06-29", "2023-07-09", "2023-07-26"), 
                        C1In1 = c(NA, 8.794, NA, 9.38, 8.86, 4.866, 5.124, 250, 484.63, 
                                  1107.53, 821.92, 367.5, 1265.6), 
                        C1In2 = c(NA, 8.794, NA, NA, 8.66, NA, NA, 70.59, 
                                  NA, NA, NA, NA, NA), 
                        C1Out = c(NA, 8.898, NA, 8.9, 7.98, 4.28, 4.88, 
                                  91.95, 197.91, 196.26, 367.92, 317.3, 433.3), 
                        C2In = c(NA, NA, NA, 8.64, NA, 4.38, NA, 313.87, NA, 
                                 233.01, NA, NA, 788.6), 
                        C2Out = c(NA, NA, NA, 8.5, NA, 4.21, NA, 237.7, NA, 
                                  162.16, NA, NA, 117.2), 
                        C3In = c(NA, 8.52, 9.1, 8.5, 4.21, 4.46, NA, 98.16, 
                                 4494.04, NA, NA, NA, 606.6), 
                        C3Out = c(NA, 8.96, 8.85, 4.23, 4.48, 4.54, NA, 
                                  57.43, 2487.91, NA, NA, NA, 447.6)), 
                   row.names = c(NA, 13L), 
                   class = "data.frame")

df = mydata |>
  pivot_longer(cols = -'Date')

p <- ggplot() + scale_y_continuous(trans = "log10") + xlab("Date") + ylab("Suspended Solids Concentration (mg/L)") +
  geom_bar(data = df, aes(x = Date, y = value, fill = name), 
           stat = 'identity', 
           position = 'dodge') + 
  guides(fill= guide_legend(title = "Site")) +
  theme(
    text = element_text(family = "serif"),
    axis.line = element_line(color='black'),
    plot.background = element_blank(),
    panel.background = element_rect(fill = "white"),
    panel.grid = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank(),
    axis.text.x = element_text(angle = 90, vjust = 0.5)
  ) +
  scale_x_discrete(labels = c('Aug 5/22', 'Aug 18/22', 'Aug 23/22', 'Sep 9/22', 'Sep 25/22', 'Sep 25/22', 'Oct 12/22', 'Nov 2/22', 'Apr 29/23', 'May 19/23', 'Jun 24/23', 'Jun 29/23', 'Jul 9/23', 'Jul 26/23'))
p # display the plot ```

to remove the expansion around the axis limits change your scale_y_* to

scale_y_continuous(trans = "log10",expand = c(0,0))

write your selections as code :

mycols <- c(C1in1 = "midnight blue",
C1In2 = "blue", 
C1Out = "lightblue",
C2In = "red", 
C2Out = "pink", 
C3In = "darkgreen",
C3Out = "lightgreen")

then use that in a scale_fill_*

 + scale_fill_manual(values=mycols)

Thank you so much, that worked.

This topic was automatically closed 42 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.