I'd like to know how to make it so that x and y, in the following example data set are plotted on the vertical axis for each element of frame in the horizontal axis. How do I do this with ggplot2?
x, y = variables, frame = YYYYMM
Example Data:
df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482,
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662,
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333,
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102,
0.104092642854814), frame = c(200912, 201001, 201002, 201003,
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1",
"2", "3", "4", "5", "6", "7"), class = "data.frame")
I've been able to get one plotted in a line, but it seems that it's not recognizing my frame as categorical (not that it is, nor do I know how to change it to such).
p <- ggplot(df, aes(x=frame, y=x))
p + geom_line()
%>% is a pipe operator reexported from the magrittr package. Start by reading the vignette. Adding things to a ggplot changes the object that gets created. The print method of ggplot draws an appropriate plot depending upon the contents of the variable.
The function geom_point() adds a layer of points to your plot, which creates a scatterplot. ggplot2 comes with many geom functions that each add a different type of layer to a plot.
This example explains how to draw a ggplot2 plot based on two different data sources. For this, we have to set the data argument within the ggplot function to be equal to NULL, and then we have to specify the two different data frames within two different calls of a geom_ function (in this case geom_point).
You need to melt your data:
library(reshape2)
dfm = melt(df, id.vars='frame')
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line()
This is what that does to your data frame:
> dfm
frame variable value
1 200912 x 0.0008923336
2 201001 x 0.0161153932
3 201002 x 0.0188150881
4 201003 x 0.0268699107
5 201004 x 0.0186573307
6 201005 x 0.0101065034
7 201006 x 0.0015441045
8 200912 y 1.3517294883
9 201001 y 0.5965402645
10 201002 y 0.6858350301
11 201003 y 0.7415458982
12 201004 y 1.0965333860
13 201005 y 0.1194482083
14 201006 y 0.1040926429
This is a rather late answer, but if you want your frame
variable intepreted date (month of the year), then convert it to a date.
You can then use scale_x_date
and the scales
package to format the x-axis
DF <- melt(df, id.vars = 'frame')
# note that I am arbitrarily setting each month to be the 15th
# day of the month, to create a complete date
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d')
library(scales)
ggplot(DF, aes(x =frame, y = value, colour = variable)) +
geom_line() +
scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months'))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With