Make the widths of bars to be same when the level of subgroups are not equal
### ---------library(ggplot2)library(ggsci)theme_set(theme( text =element_text(size =10, family ="Arial"), panel.background =element_rect(fill =NA, color =NA), axis.title =element_text(size =10, color ="black"), axis.text =element_text(size =10, color ="black"),# axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), axis.ticks.length.x =unit(0.3, "lines"), axis.line =element_line(colour ="Black"), axis.ticks =element_line(colour ="black", linewidth =0.6), plot.title =element_text(face ="bold", hjust =0.5, size =10)))# Create a sample dataframedf<-data.frame( group =c("A", "B", "B", "C", "C"), variant =c("v1", "v1", "v2", "v1", "v2"), value =c(10, 20, 30, 15, 25))# Specify the widths for each group and variantwidths<-data.frame( group =c("A", "B", "C"), v1 =c(0.4, 0.8, 0.8), v2 =c(0, 0.8, 0.8)# set width to 0 for variant v2 in group A)# Create the barplot with position_dodge2ggplot(df, aes(x =group, y =value, fill =variant))+geom_bar( stat ="identity", position =position_dodge2(preserve ="single", width =widths))+scale_fill_jco()+scale_y_continuous( expand =expansion(mult =c(0, 0.1)))+scale_x_discrete(breaks =c("A", "B", "C"))# Ensure all groups are displayed in x-axis
In this example, we set widths to be a data frame that specifies the widths for each group and variant. We set the width for v2 in group A to 0 to hide the bar for that variant. Then, we use position_dodge2 with preserve = “single” and the width argument set to widths to create the barplot with different bar widths for each group and variant.
---title: "Equalizing Bar Widths"date: 2023-03-06categories: - r - ggplot2image: barplot.png---Make the widths of bars to be same when the level of subgroups are not equal```{r, load-libraries-data, warning=FALSE, message=FALSE}### ---------library(ggplot2)library(ggsci)theme_set( theme( text = element_text(size = 10, family = "Arial"), panel.background = element_rect(fill = NA, color = NA), axis.title = element_text(size = 10, color = "black"), axis.text = element_text(size = 10, color = "black"), # axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), axis.ticks.length.x = unit(0.3, "lines"), axis.line = element_line(colour = "Black"), axis.ticks = element_line(colour = "black", linewidth = 0.6), plot.title = element_text(face = "bold", hjust = 0.5, size = 10) ))# Create a sample dataframedf <- data.frame( group = c("A", "B", "B", "C", "C"), variant = c("v1", "v1", "v2", "v1", "v2"), value = c(10, 20, 30, 15, 25))# Specify the widths for each group and variantwidths <- data.frame( group = c("A", "B", "C"), v1 = c(0.4, 0.8, 0.8), v2 = c(0, 0.8, 0.8) # set width to 0 for variant v2 in group A)# Create the barplot with position_dodge2ggplot(df, aes(x = group, y = value, fill = variant)) + geom_bar( stat = "identity", position = position_dodge2(preserve = "single", width = widths) ) + scale_fill_jco() + scale_y_continuous( expand = expansion(mult = c(0, 0.1)) ) + scale_x_discrete(breaks = c("A", "B", "C")) # Ensure all groups are displayed in x-axis# ggsave(# plot = p,# filename = "barplot.png",# width = 4,# height = 3,# )```In this example, we set widths to be a data frame that specifies the widths for each group and variant. We set the width for v2 in group A to 0 to hide the bar for that variant. Then, we use position_dodge2 with preserve = "single" and the width argument set to widths to create the barplot with different bar widths for each group and variant.