Question: ggplot2 problem with Date format
0
gravatar for luzglongoria
2.0 years ago by
luzglongoria40
luzglongoria40 wrote:

Hi there, I'm trying to plot my data but I am not able to present dates as I want (by month and with the name of the month). First of all I show you part of my data:

Ind Date    Parasitemia       Genera              Age       Year
11  15/7/17 0              Haemoproteus          Adult      2017
26  23/8/16 0,000274329    Haemoproteus        Juveniles    2016
10  1/2/17  0,000395499    Plasmodium            Adult      2017
4   15/8/17 0              Plasmodium            Adult      2017
10  1/9/16  0,002482416    Plasmodium            Adult      2016

as you can see I have Individuals (the same individua) that have been analyzed over time (from February 2016 to May 2017). My goal is to plot a general graph like this one:

Plot

The code I have been using is this one:

ggplot(BigPlot, aes(x = Date, y = log(Parasitemia), col = Genera)) + geom_smooth() +
geom_point(aes(shape = Genera), size = 2) + ylab("Log10 Parasitemia") + xlab("Date") + 
facet_grid(Year~Age~Genera) +
scale_size("fixed_y") + 
theme(axis.text = element_text(size = 20), legend.text = element_text(size=20),
 axis.title.x = element_text(size = 20), axis.title.y = element_text(size = 20),
legend.title = element_text(size = 20), strip.text.x = element_text(size = 20))+
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank()) +
 theme(legend.position = "none")

BUT If I try to modify the dates in order to show every month (by using the package lubridate I got an eeror message: same code that before plus

 (scale_x_date(labels=date_format("%b %y")))

Then,

Error: Invalid input: date_trans works with objects of class Date only

I have also tried with

ggplot(BigPlot, aes(x = Date, y = log(Parasitemia), col = Genera)) + geom_smooth() +
geom_point(aes(shape = Genera), size = 2) + ylab("Log10 Parasitemia") + xlab("Date") +
facet_grid(Year~Age~Genera) + 
 scale_size("fixed_y") +
theme(axis.text = element_text(size = 20), legend.text = element_text(size=20), 
axis.title.x = element_text(size = 20), axis.title.y = element_text(size = 20), 
legend.title = element_text(size = 20), strip.text.x = element_text(size = 20))+
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank()) +
 (scale_x_date(breaks = date_breaks("1 month"),
labels = date_format("%m"))) +
geom_rect(data = BigPlot, 
xmin = as.Date("2016-02-01", "%Y-%m-%d"),
 xmax = as.Date("2017-09-15",  "%Y-%m-%d"),
ymin = -Inf,
ymax = Inf),
 fill = "gray",
 alpha = 0.5)

but I got the same error message:

Error: Invalid input: date_trans works with objects of class Date only

I guess I need to modify my original file somehow. I have tried to to this by :

newdata$event_Date <- as.Date(newdata$event_date)

but then,

Error in as.Date.default(newdata$event_date) : 
do not know how to convert 'newdata$event_date' to class “Date”

Any ideas?

datesinr lubridate ggplot R • 3.4k views
ADD COMMENTlink modified 2.0 years ago • written 2.0 years ago by luzglongoria40

Does BigPlot %>% dplyr::mutate(Date = lubridate::dmy(Date)) %>% ggplot(..... help?

ADD REPLYlink written 2.0 years ago by russhh5.5k

No. It gives me this error:

Error: Mapping should be created with aes() oraes_()`. In addition: Warning messages: 1: package ‘bindrcpp’ was built under R version 3.4.4 2: All formats failed to parse. No formats found.

ADD REPLYlink written 2.0 years ago by luzglongoria40

In the code snippet using as.Date you refer to the event_date column - how are the dates formatted in this column? is it the same as the "Date" column in the original data you showed us? If so, have a look at the as.Date help file:

"A character string. If not specified, it will try "%Y-%m-%d" then "%Y/%m/%d" on the first non-NA element, and give an error if neither works. Otherwise, the processing is via strptime"

Your date appears to be formatted as "%d/%m/%Y" - try specifying the format when running as.Date.

ADD REPLYlink written 2.0 years ago by Russ470
0
gravatar for cpad0112
2.0 years ago by
cpad011214k
India
cpad011214k wrote:

Data frame in OP is BigPlot for ggplot. However, as.Data is on some other data as I see in OP. Is this a typo? Code you are using, didn't throw any errors in producing the plot (except some minor errors): I didn't modify your code except for as.Date(Date) instead of Date.

library(dplyr)
test=read.csv("test.txt", sep = "\t", strip.white = T, stringsAsFactors = F) 
library(ggplot2)
ggplot(test, aes(x = as.Date(Date), y = log(Parasitemia), col = Genera)) + geom_smooth() +
    geom_point(aes(shape = Genera), size = 2) + ylab("Log10 Parasitemia") + xlab("Date") + 
    facet_grid(Year~Age~Genera) +
    scale_size("fixed_y") + 
    theme(axis.text = element_text(size = 20), legend.text = element_text(size=20),
          axis.title.x = element_text(size = 20), axis.title.y = element_text(size = 20),
          legend.title = element_text(size = 20), strip.text.x = element_text(size = 20))+
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank()) +
    theme(legend.position = "none")

Rplot

To the values, i added some random numbers to get points.

> test
  Ind     Date Parasitemia       Genera       Age Year
1  11 15-07-17    20.00000 Haemoproteus     Adult 2017
2  26 23-08-16    10.00027 Haemoproteus Juveniles 2016
3  10  1-02-17    20.00040   Plasmodium     Adult 2017
4   4 15-08-17    30.00000   Plasmodium     Adult 2017
5  10  1-09-16    40.00248   Plasmodium     Adult 2016
ADD COMMENTlink modified 2.0 years ago • written 2.0 years ago by cpad011214k

Yes, but my real data is bigger, I have more than 20 different dates and when I try to plot them I got only 3 or 4 different dates (and I want all the month to appear). that's why I am trying to include other commands from the package lubridate ("scale_x_date"). And when I include them I got the error message.

ADD REPLYlink written 2.0 years ago by luzglongoria40
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1261 users visited in the last hour