In the artificial data I have created for the MWE below I have tried to demonstrate the essence of a script I have created in R. As can be seen by the graph that gets produced from this code, on one of my conditions I don't have a "No" value to complete the series.
I have been told that unless I can make this last column that sadly doesn't have the extra series as thin as the columns else where in the graph I won't be permitted to use these graphs. This is sadly a problem because the script I have written produces hundreds of graphs simultaneously, complete with stats, significance indicators, propogated error bars, and intelligent y-axis adjustments (these features are of course not present in the MWE).
Few other comments:
This exception column is not guaranteed to be at the end of the graph... so manual tweaking to force the series to change color and invert the order leaving the extra space on the right hand side isn't reliable.
I have tried to simulate the data as a constant 0 so that the series "is present" but invisible, but as would be expected, the order of the series c(No,Yes) makes this skip a space which is also unacceptable. This is how this same question was answered here, but sadly it doesn't work for me with my restrictions: Consistent width for geom_bar in the event of missing data and R ggplot empty factor level
I also tried to do this with facets but numerous issues arose there including line breaks, and errors in the annotations I add to the x-axis.
library(ggplot2) print("Program started") x <- c("1","2","3","1","2","3","4") s <- c("No","No","No","Yes","Yes","Yes","Yes") y <- c(1,2,3,2,3,4,5) df <- as.data.frame(cbind(x,s,y)) print(df) gg <- ggplot(data = df, aes_string(x="x", y="y", weight="y", ymin=paste0("y"), ymax=paste0("y"), fill="s")); dodge_str <- position_dodge(width = NULL, height = NULL); gg <- gg + geom_bar(position=dodge_str, stat="identity", size=.3, colour = "black") print(gg) print("Program complete - a graph should be visible.")