Reputation: 8594
I'm having a very, very tough time getting the x-axis to look correct for my graphs.
Here is my data:
df <- data.frame(
Month = factor(c(
"2011-07-31", "2011-08-31", "2011-09-30", "2011-10-31", "2011-11-30",
"2011-12-31", "2012-01-31", "2012-02-29", "2012-03-31", "2012-04-30",
"2012-05-31", "2012-06-30"
)),
AvgVisits = c(
6.98655104580674, 7.66045407330464, 7.69761337479304, 7.54387561322994,
7.24483848458728, 6.32001400498928, 6.66794871794872, 7.207780853854,
7.60281201431308, 6.70113837397123, 6.57634103019538, 6.75321935568936
)
)
Here is the chart I am trying to graph:
ggplot(df, aes(x = Month, y = AvgVisits)) +
geom_bar() +
theme_bw() +
labs(x = "Month", y = "Average Visits per User")
That chart works fine - but, if I want to adjust the formatting of the date, I believe I should add this:
scale_x_date(labels = date_format("%m-%Y"))
I'm trying to make it so the date labels are 'MMM-YYYY'
ggplot(df, aes(x = Month, y = AvgVisits)) +
geom_bar() +
theme_bw() +
labs(x = "Month", y = "Average Visits per User") +
scale_x_date(labels = date_format("%m-%Y"))
When I plot that, I continue to get this error:
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
Despite hours of research on formatting of geom_line
and geom_bar
, I can't fix it. Can anyone explain what I'm doing wrong?
Edit: As a follow-up thought: Can you use date as a factor, or should you use as.Date
on a date column?
Upvotes: 88
Views: 188344
Reputation:
To show months as Jan 2017 Feb 2017 etc:
scale_x_date(date_breaks = "1 month", date_labels = "%b %Y")
Angle the dates if they take up too much space:
theme(axis.text.x=element_text(angle=60, hjust=1))
Upvotes: 140
Reputation: 173697
Can you use date as a factor?
Yes, but you probably shouldn't.
...or should you use
as.Date
on a date column?
Yes.
Which leads us to this:
library(scales)
df$Month <- as.Date(df$Month)
ggplot(df, aes(x = Month, y = AvgVisits)) +
geom_bar(stat = "identity") +
theme_bw() +
labs(x = "Month", y = "Average Visits per User") +
scale_x_date(labels = date_format("%m-%Y"))
in which I've added stat = "identity"
to your geom_bar
call.
In addition, the message about the binwidth wasn't an error. An error will actually say "Error" in it, and similarly a warning will always say "Warning" in it. Otherwise it's just a message.
Upvotes: 91