Cleaning axis labels in gg pplot2

Hi, I have created the following ggplot using the code:

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("Total Dissolved Solids Concentration (mg/L)") +
  geom_bar(data = df, aes(x = Date, y = value, fill = name), 
           stat = 'identity', 
           position = 'dodge') + 
  theme(axis.line = element_line(color='black'),
        plot.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),   # removes grid lines from plot 
  ) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5),
            panel.grid = element_blank()
    + 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')))

# change font to times new roman 
library(extrafont)

p # display the plot 

p + theme_classic() + coord_cartesian(ylim = c(1,10000))  # change background of plot to white 

As shown in the figure, there are way too many dates on the x-axis. I want to clean up this axis to show only a few dates. I would also like to change the font of the labels to Times New Roman, and change the title for the legend from "name" to "Site"

Does anyone have any advice?

Look at scale_x_continuous to set your own breaks and labels. Look at legend.title inside theme to mess with the legend.

1 Like

Hi @brant, I'm change a little bit your code for add the layer in different steps:

library(tidyverse)
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') |> 
  rename(Site=name) # rename column

p <-  ggplot() + scale_y_continuous(trans = "log10") + xlab("Date") + ylab("Total Dissolved Solids Concentration (mg/L)") +
  geom_bar(data = df, aes(x = Date, y = value, fill = Site), 
           stat = 'identity', 
           position = 'dodge') + 
  theme(axis.line = element_line(color='black'),
        plot.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank()) +
  scale_fill_manual(values=c('red','green','#FF6666','pink','orange', 'gray','purple')) #chage colors

windowsFonts(Times=windowsFont("Times New Roman")) 

p # display the plot 

p + theme_classic() + coord_cartesian(ylim = c(1,10000)) +
  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'))+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5),
        panel.grid = element_blank()) +
  theme(text=element_text(family="Times", face="bold", size=12)) #Times New Roman, 12pt, Bold

# the plot don't have a title?

Thank you @M_AcostaCH, that seams to work. Titles are generally not needed for my papers.

Thank you. Here is my revised plot.

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

Im update my last response, for change the color.

Im know for eliminate the white spaces that you said. Im use
scale_y_continuous(expand = c(0, 1)) but dont run well. But this is a way for avoid this white spaces.

This topic was automatically closed 7 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.