I am trying to display all month values on my x-axis, which is formatted as a "yearmon" variable
My data are structured as follows:
Print data example
dput(collective_action_monthly[1:4, ])
ouptut:
structure(list(collective_action = structure(c(2L, 2L, 2L, 2L
), .Label = c("0", "1"), class = "factor"), treatment_details = c("pre",
"pre", "pre", "pre"), month_year = structure(c(2011.41666666667,
2011.75, 2011.83333333333, 2011.91666666667), class = "yearmon"),
n = c(22L, 55L, 15L, 207L), collective_action_percentage = c(0.0124223602484472,
0.031055900621118, 0.00846979107848673, 0.116883116883117
), am = structure(c(2L, 2L, 2L, 2L), .Label = c("post", "pre"
), class = "factor")), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"), row.names = c(NA, -4L), groups = structure(list(
treatment_details = "pre", .rows = structure(list(1:4), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -1L), .drop = TRUE))
This my code to visualize the trend using bar graphs by month:
ggplot(data = collective_action_monthly, aes(x = month_year, y = collective_action_percentage))
geom_bar(stat = "identity", position=position_dodge())
scale_fill_grey()
ylab("percentage")
theme(text=element_text(size=10))
theme(plot.title = element_text(size = 10, face = "bold"))
scale_y_continuous(labels = percent_format(accuracy = 1))
theme(axis.text.x = element_text(angle = 90, vjust = 0.5))
theme_bw()
However, rather than only showing three months in the x-axis, I would like to show all months. I also tried adding "scale_x_continuous(labels = 0:14, breaks = 0:14) " to the code above, but it still does not display months:
Ideally, I would like to produce a graph as the one below, but with months instead of years.
CodePudding user response:
The zoo
packages includes scale_x_yearmon
, so you can do:
library(zoo)
library(ggplot2)
ggplot(data = collective_action_monthly,
aes(x = month_year, y = collective_action_percentage))
geom_col(position = position_dodge(preserve = "single"))
scale_y_continuous(labels = scales::percent_format(accuracy = 1),
name = "percentage")
scale_x_yearmon(breaks = seq(2011.25, 2012, 1/12),
limits = c(2011.25, 2012))
theme_bw(base_size = 10)
theme(plot.title = element_text(size = 10, face = "bold"),
axis.text.x = element_text(angle = 90, vjust = 0.5))
CodePudding user response:
ggplot
doesn't have a yearmon
scale built in--looks like the zoo
package does, but it doesn't have a convenient way to specify "breaks every month"--so I would suggest converting to Date
class and using scale_x_date
. I've deleted most of your theme
stuff to make the changes I've made more obvious (the theming didn't seem relevant to the issue).
ggplot(data = collective_action_monthly, aes(x = as.Date(month_year), y = collective_action_percentage))
geom_bar(stat = "identity", position=position_dodge())
scale_fill_grey()
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y")
ylab("percentage")
theme_bw()