简体   繁体   中英

How can I plot a dataframe in R given in quarterly years?

i have a dataset given with:

   Country Time      Value
1   USA    1999-Q1   292929
2   USA    1999-Q2   392023
3.  USA    1999-Q3   9392992
4

.... and so on. Now I would like to plot this dataframe with Time being on the x-axis and y being the Value. But the problem I face is I dont know how to plot the Time. Because it is not given in month/date/year. If that would be the case I would just code as.Date( format = "%m%d%y") . I am not allowed to change the quarterly name. So when I plot it, it should stay that way. How can I do this?

Thank you in advance!

Assuming DF shown in the Note at the end, convert the Time column to yearqtr class which directly represents year and quarter (as opposed to using Date class) and use scale_x_yearqtr . See ?scale_x_yearqtr for more information.

library(ggplot2)
library(zoo)

fmt <- "%Y-Q%q"
DF$Time <- as.yearqtr(DF$Time, format = fmt)
ggplot(DF, aes(Time, Value, col = Country)) + 
  geom_point() + 
  geom_line() +
  scale_x_yearqtr(format = fmt)

(continued after graphics) 截屏

It would also be possible to convert it to a wide form zoo object with one column per country and then use autoplot . Using DF from the Note below:

fmt <- "%Y-Q%q"
z <- read.zoo(DF, split = "Country", index = "Time", 
  FUN = as.yearqtr, format = fmt)
autoplot(z) + scale_x_yearqtr(format = fmt)

Note

Lines <- "
Country Time Value 
1 USA 1999-Q1 292929 
2 USA 1999-Q2 392023 
3 USA 1999-Q3 9392992"
DF <- read.table(text = Lines)

Using ggplot2:

library(ggplot2)

ggplot(df, aes(Time, Value, fill = Country)) + geom_col()

在此处输入图像描述

I know other people have already answered, but I think this more general answer should also be here.

When you do as.Date() , you can only do the beginning. I tried it on your data frame (I called it df ), and it worked:

> as.Date(df$Time, format = "%Y")
[1] "1999-11-28" "1999-11-28" "1999-11-28"

Now, I don't know if you want to use plot() , ggplot() , the ggplot2 library... I don't know that, and it doesn't matter. However you want to specify the y axis, you can do it this way.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM