tarwid
January 2, 2019, 12:24pm
1
I want to present a plot with a date variable formatted as year-mon (yearmon) in the x-axis.
I formatted the year-mon variable like this:
library("zoo")
GP$time <- as.yearmon(paste(GP$year, GP$month, sep = "-"))
head(GP$time) # look at it
plot(suiciderate ~ time, GP) # plot it
Giving this formatting:
[1] "Jan 2012" "Feb 2012" "Mar 2012" "Apr 2012" "May 2012"
I have problems specifying xmin and xmax for the following plot:
GP_treatment <- ggplot(GP,
aes(x = time, y = suiciderate, col = factor(intervention))) +
geom_smooth(se = FALSE) +
annotate("rect", xmin = "Jan 2016", xmax = "Jul 2016", ymin = -Inf, ymax = +Inf,
alpha = .8)
val = c("#E41A1C", "#377EB8")
lab = c("Control", "Treatment")
GP_treatment +
scale_x_continuous("Month", expand = c(0,0)) +
scale_y_continuous("Monthly suicide rate per 100 000", expand = c(0,0)) +
scale_color_manual("Treatment status",
values = val,
labels = lab)+
geom_point(alpha=.2)
Running this just returns:
Error: Discrete value supplied to continuous scale
I suspect xmin and xmax must be specified otherwise, but I haven't found the solution yet. Hopefully someone can help me out on this.
That way you are passing a character string to a continuous scale (e. g. "Jan 2016"), I have never used zoo, but, maybe if you do this, it would work
xmin = as.yearmon("Jan 2016")
I would rather prefer to use a regular date variable and formatting the axis with scale_x_date()
2 Likes
tarwid
January 2, 2019, 12:54pm
3
Thanks! That solved the problem. I'm new to R, and the zoo package was the first thing I found looking for date formatting of month-year variables without dates in R. Could you point me to a source on regular formatting of such a date variable?
I was assuming that you already have a variable of class 'date' and that you can do something like this, but maybe that is not your case.
library(tidyverse)
data <- data.frame(
time = as.Date(c("2018-01-06", "2018-02-06", "2018-03-06", "2018-04-06",
"2018-05-06", "2018-06-06")),
ping = c(31.04, 30.09, 29.22, 29.33, 30.18, 27.8)
)
data %>%
ggplot(aes(time, ping)) +
geom_line() +
scale_x_date(date_breaks = 'months', date_labels = '%b-%Y')
Created on 2019-01-02 by the reprex package (v0.2.1)
You can read the documentation of scale_x_date()
function by tiping this in the console
?scale_x_date
1 Like
tarwid
January 2, 2019, 1:58pm
5
Great, thank you for your helpful comments! I don't have such a variable, but I'll definitely look more into this.
system
Closed
January 9, 2019, 1:58pm
6
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.