Install library using install.packages("ggplot2")
Import ggplot2 and dplyr library:
> library("ggplot2")
> library("dplyr")
Creating sample data set -
> date <- seq(from=as.Date("1/1/2020", format("%d/%m/%y")),
+ by = "year",
+ length.out = 20)
> set.seed(99)
> prod <- round(abs(rnorm(20)*100))
> df <- data.frame(date, prod)
> df
date prod
1 2020-01-01 21
2 2021-01-01 48
3 2022-01-01 9
4 2023-01-01 44
5 2024-01-01 36
6 2025-01-01 12
7 2026-01-01 86
8 2027-01-01 49
9 2028-01-01 36
10 2029-01-01 129
11 2030-01-01 75
12 2031-01-01 92
13 2032-01-01 75
14 2033-01-01 251
15 2034-01-01 304
16 2035-01-01 0
17 2036-01-01 39
18 2037-01-01 175
19 2038-01-01 50
20 2039-01-01 27
Create a line graph using geom_line() -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line()

Add points to the line -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line() +
+ geom_point()

Line type
The different line types available in R software are : “blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash”. Example of a dashed line -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(linetype="dashed") +
+ geom_point()
Example of a twodash line -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(linetype="twodash") +
+ geom_point()

Line Size
To change the size of the line the argument size can be used -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(size=2) +
+ geom_point()

Line Transparency
To change the transparency of the line the argument alpha can be used -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(size = 2, alpha=0.2) +
+ geom_point()

Line Color
Specify the color name in the color argument -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(color="red") +
+ geom_point()

Title and axis names
Using labs() -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(color="red") +
+ geom_point()+
+ labs(title="Example of a line chart",
+ x="X axis title",
+ y="Y axis title")

Using ggtitle, xlab and ylab -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_line(color="red") +
+ geom_point()+
+ ggtitle("Example of a line chart")+
+ xlab("X axis title")+
+ ylab("Y axis title")

Fitting a line
A line can be fitted on the points using geom_smooth() -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_smooth() +
+ geom_point()

To hide the standard error area around the line set the argument se=F inside geom_smooth() -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_smooth(se=F) +
+ geom_point()

Stairs Line
Using geom_step() instead of geom_line -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_step() +
+ geom_point()

Area plot
To change the transparency of the line the argument alpha can be used -
> ggplot(data=df, aes(x=date, y=prod)) +
+ geom_area(fill="#E69F00", alpha=0.2) +
+ geom_point()

Multiple Line
For this we are using the built in economics data set -
> head(economics)
# A tibble: 6 x 6
date pce pop psavert uempmed unemploy
<date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1967-07-01 507. 198712 12.6 4.5 2944
2 1967-08-01 510. 198911 12.6 4.7 2945
3 1967-09-01 516. 199113 11.9 4.6 2958
4 1967-10-01 512. 199311 12.9 4.9 3143
5 1967-11-01 517. 199498 12.8 4.7 3066
6 1967-12-01 525. 199657 11.8 4.8 3018
> ls.str(economics)
date : Date[1:574], format: "1967-07-01" "1967-08-01" "1967-09-01" "1967-10-01" "1967-11-01" ...
pce : num [1:574] 507 510 516 512 517 ...
pop : num [1:574] 198712 198911 199113 199311 199498 ...
psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
unemploy : num [1:574] 2944 2945 2958 3143 3066 ...
Here is a plot with date on X axis and personal saving rate (psavert) on Y axis -
> ggplot(economics, aes(x=date)) +
+ geom_line(aes(y = psavert), color = "red")

Let’s add another line to the plot -
> ggplot(economics, aes(x=date)) +
+ geom_line(aes(y = psavert), color = "darkred") +
+ geom_line(aes(y = uempmed), color="steelblue") +
+ xlab("Date") + ylab("Values")

Adding legend
Let’s assume we have two data sets of production and sales over time -
> date <- seq(from=as.Date("1/1/2020", format("%d/%m/%y")), by = "year", length.out = 20)
> set.seed(99)
> prod <- round(abs(rnorm(20)*100))
> sale <- round(abs(rnorm(20)*100))
> dprod <- data.frame(date, prod)
> dsale <- data.frame(date, sale)
We need to do some data wrangling to prepare the data for the visualization-
> df <- dprod %>%
+ mutate(date, prod, Sector="Production") %>%
+ rename(Values = prod) %>%
+ bind_rows(dsale %>%
+ mutate(date, sale, Sector="Sale") %>%
+ rename(Values = sale))
> ls.str(df)
date : Date[1:40], format: "2020-01-01" "2021-01-01" "2022-01-01" "2023-01-01" "2024-01-01" ...
Sector : chr [1:40] "Production" "Production" "Production" "Production" ...
Values : num [1:40] 21 48 9 44 36 12 86 49 36 129 ...
Now use color/linetype to use different line for different group and a legend will be generated -
> ggplot(df, aes(x = date, y = Values, color = Sector)) +
+ geom_line() +
+ ggtitle("Multiple Line Example")

Using line type -
> ggplot(df, aes(x = date, y = Values, linetype = Sector, color = Sector)) +
+ geom_line() +
+ ggtitle("Multiple Line Example") +
+ geom_point()

Expert solutions to R Studio statistics assignments.
LS0tDQp0aXRsZTogImdncGxvdDIgLSBsaW5lIGRpYWdyYW0iDQphdXRob3I6ICdNRCBBSFNBTlVMIElTTEFNJw0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGNvbW1lbnQgPSAiIiwgcHJvbXB0ID0gVFJVRSwgbWVzc2FnZT1GLCB3YXJuaW5nID0gRg0KKQ0KYGBgDQoNCi0tLQ0KDQpJbnN0YWxsIGxpYnJhcnkgdXNpbmcgYGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKWAgICANCkltcG9ydCBnZ3Bsb3QyIGFuZCBkcGx5ciBsaWJyYXJ5Og0KYGBge3Igd2FybmluZz1GfQ0KbGlicmFyeSgiZ2dwbG90MiIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpgYGANCg0KQ3JlYXRpbmcgc2FtcGxlIGRhdGEgc2V0IC0gDQoNCmBgYHtyfQ0KZGF0ZSA8LSBzZXEoZnJvbT1hcy5EYXRlKCIxLzEvMjAyMCIsIGZvcm1hdCgiJWQvJW0vJXkiKSksIA0KICAgICAgICAgICAgYnkgPSAieWVhciIsIA0KICAgICAgICAgICAgbGVuZ3RoLm91dCA9IDIwKQ0Kc2V0LnNlZWQoOTkpDQpwcm9kIDwtIHJvdW5kKGFicyhybm9ybSgyMCkqMTAwKSkNCmRmIDwtIGRhdGEuZnJhbWUoZGF0ZSwgcHJvZCkNCmRmDQpgYGANCg0KQ3JlYXRlIGEgbGluZSBncmFwaCB1c2luZyBnZW9tX2xpbmUoKSAtDQpgYGB7cn0NCmdncGxvdChkYXRhPWRmLCBhZXMoeD1kYXRlLCB5PXByb2QpKSArDQogIGdlb21fbGluZSgpDQpgYGANCg0KQWRkIHBvaW50cyB0byB0aGUgbGluZSAtDQpgYGB7cn0NCmdncGxvdChkYXRhPWRmLCBhZXMoeD1kYXRlLCB5PXByb2QpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KLS0tDQoNCiMjIyBMaW5lIHR5cGUgICANCg0KVGhlIGRpZmZlcmVudCBsaW5lIHR5cGVzIGF2YWlsYWJsZSBpbiBSIHNvZnR3YXJlIGFyZSA6IOKAnGJsYW5r4oCdLCDigJxzb2xpZOKAnSwg4oCcZGFzaGVk4oCdLCDigJxkb3R0ZWTigJ0sIOKAnGRvdGRhc2jigJ0sIOKAnGxvbmdkYXNo4oCdLCDigJx0d29kYXNo4oCdLiANCkV4YW1wbGUgb2YgYSBkYXNoZWQgbGluZSAtIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YT1kZiwgYWVzKHg9ZGF0ZSwgeT1wcm9kKSkgKw0KICBnZW9tX2xpbmUobGluZXR5cGU9ImRhc2hlZCIpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCkV4YW1wbGUgb2YgYSB0d29kYXNoIGxpbmUgLSANCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSJ0d29kYXNoIikgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQotLS0NCg0KIyMjIExpbmUgU2l6ZQ0KDQpUbyBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGxpbmUgdGhlIGFyZ3VtZW50IHNpemUgY2FuIGJlIHVzZWQgLSANCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9saW5lKHNpemU9MikgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQotLS0NCg0KIyMjIExpbmUgVHJhbnNwYXJlbmN5DQoNClRvIGNoYW5nZSB0aGUgdHJhbnNwYXJlbmN5IG9mIHRoZSBsaW5lIHRoZSBhcmd1bWVudCBhbHBoYSBjYW4gYmUgdXNlZCAtIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YT1kZiwgYWVzKHg9ZGF0ZSwgeT1wcm9kKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDIsIGFscGhhPTAuMikgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQotLS0NCg0KIyMjIExpbmUgQ29sb3IgICANCg0KU3BlY2lmeSB0aGUgY29sb3IgbmFtZSBpbiB0aGUgY29sb3IgYXJndW1lbnQgLSANCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9saW5lKGNvbG9yPSJyZWQiKSArDQogIGdlb21fcG9pbnQoKQ0KYGBgDQoNCi0tLQ0KDQojIyMgVGl0bGUgYW5kIGF4aXMgbmFtZXMgICANCg0KVXNpbmcgbGFicygpIC0NCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9saW5lKGNvbG9yPSJyZWQiKSArDQogIGdlb21fcG9pbnQoKSsNCiAgbGFicyh0aXRsZT0iRXhhbXBsZSBvZiBhIGxpbmUgY2hhcnQiLA0KICAgICAgIHg9IlggYXhpcyB0aXRsZSIsDQogICAgICAgeT0iWSBheGlzIHRpdGxlIikNCmBgYA0KDQpVc2luZyBnZ3RpdGxlLCB4bGFiIGFuZCB5bGFiIC0gDQpgYGB7cn0NCmdncGxvdChkYXRhPWRmLCBhZXMoeD1kYXRlLCB5PXByb2QpKSArDQogIGdlb21fbGluZShjb2xvcj0icmVkIikgKw0KICBnZW9tX3BvaW50KCkrDQogIGdndGl0bGUoIkV4YW1wbGUgb2YgYSBsaW5lIGNoYXJ0IikrDQogIHhsYWIoIlggYXhpcyB0aXRsZSIpKw0KICB5bGFiKCJZIGF4aXMgdGl0bGUiKQ0KYGBgDQoNCi0tLQ0KDQojIyMgRml0dGluZyBhIGxpbmUgICANCg0KQSBsaW5lIGNhbiBiZSBmaXR0ZWQgb24gdGhlIHBvaW50cyB1c2luZyBnZW9tX3Ntb290aCgpIC0gDQpgYGB7cn0NCmdncGxvdChkYXRhPWRmLCBhZXMoeD1kYXRlLCB5PXByb2QpKSArDQogIGdlb21fc21vb3RoKCkgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQpUbyBoaWRlIHRoZSBzdGFuZGFyZCBlcnJvciBhcmVhIGFyb3VuZCB0aGUgbGluZSBzZXQgdGhlIGFyZ3VtZW50IHNlPUYgaW5zaWRlIGdlb21fc21vb3RoKCkgLQ0KYGBge3J9DQpnZ3Bsb3QoZGF0YT1kZiwgYWVzKHg9ZGF0ZSwgeT1wcm9kKSkgKw0KICBnZW9tX3Ntb290aChzZT1GKSArDQogIGdlb21fcG9pbnQoKQ0KYGBgDQoNCi0tLQ0KDQojIyMgU3RhaXJzIExpbmUgICANCg0KVXNpbmcgZ2VvbV9zdGVwKCkgaW5zdGVhZCBvZiBnZW9tX2xpbmUgLSANCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9zdGVwKCkgKw0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQotLS0NCg0KIyMjIEFyZWEgcGxvdA0KDQpUbyBjaGFuZ2UgdGhlIHRyYW5zcGFyZW5jeSBvZiB0aGUgbGluZSB0aGUgYXJndW1lbnQgYWxwaGEgY2FuIGJlIHVzZWQgLSANCmBgYHtyfQ0KZ2dwbG90KGRhdGE9ZGYsIGFlcyh4PWRhdGUsIHk9cHJvZCkpICsNCiAgZ2VvbV9hcmVhKGZpbGw9IiNFNjlGMDAiLCBhbHBoYT0wLjIpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KLS0tDQoNCiMjIyBNdWx0aXBsZSBMaW5lIA0KDQpGb3IgdGhpcyB3ZSBhcmUgdXNpbmcgdGhlIGJ1aWx0IGluIGBlY29ub21pY3NgIGRhdGEgc2V0IC0NCmBgYHtyfQ0KaGVhZChlY29ub21pY3MpIA0KbHMuc3RyKGVjb25vbWljcykNCmBgYA0KDQpIZXJlIGlzIGEgcGxvdCB3aXRoIGRhdGUgb24gWCBheGlzIGFuZCBwZXJzb25hbCBzYXZpbmcgcmF0ZSAocHNhdmVydCkgb24gWSBheGlzIC0gDQpgYGB7cn0NCmdncGxvdChlY29ub21pY3MsIGFlcyh4PWRhdGUpKSArIA0KICBnZW9tX2xpbmUoYWVzKHkgPSBwc2F2ZXJ0KSwgY29sb3IgPSAicmVkIikgDQpgYGANCg0KTGV0J3MgYWRkIGFub3RoZXIgbGluZSB0byB0aGUgcGxvdCAtIA0KYGBge3J9DQpnZ3Bsb3QoZWNvbm9taWNzLCBhZXMoeD1kYXRlKSkgKyANCiAgZ2VvbV9saW5lKGFlcyh5ID0gcHNhdmVydCksIGNvbG9yID0gImRhcmtyZWQiKSArIA0KICBnZW9tX2xpbmUoYWVzKHkgPSB1ZW1wbWVkKSwgY29sb3I9InN0ZWVsYmx1ZSIpICsNCiAgeGxhYigiRGF0ZSIpICsgeWxhYigiVmFsdWVzIikNCmBgYA0KDQotLS0NCg0KIyMjIyBBZGRpbmcgbGVnZW5kDQoNCkxldCdzIGFzc3VtZSB3ZSBoYXZlIHR3byBkYXRhIHNldHMgb2YgcHJvZHVjdGlvbiBhbmQgc2FsZXMgb3ZlciB0aW1lIC0gDQpgYGB7cn0NCmRhdGUgPC0gc2VxKGZyb209YXMuRGF0ZSgiMS8xLzIwMjAiLCBmb3JtYXQoIiVkLyVtLyV5IikpLCBieSA9ICJ5ZWFyIiwgbGVuZ3RoLm91dCA9IDIwKQ0Kc2V0LnNlZWQoOTkpDQpwcm9kIDwtIHJvdW5kKGFicyhybm9ybSgyMCkqMTAwKSkNCnNhbGUgPC0gcm91bmQoYWJzKHJub3JtKDIwKSoxMDApKQ0KZHByb2QgPC0gZGF0YS5mcmFtZShkYXRlLCBwcm9kKQ0KZHNhbGUgPC0gZGF0YS5mcmFtZShkYXRlLCBzYWxlKQ0KYGBgDQogIA0KV2UgbmVlZCB0byBkbyBzb21lIGRhdGEgd3JhbmdsaW5nIHRvIHByZXBhcmUgdGhlIGRhdGEgZm9yIHRoZSB2aXN1YWxpemF0aW9uLQ0KYGBge3J9DQpkZiA8LSBkcHJvZCAlPiUgDQogIG11dGF0ZShkYXRlLCBwcm9kLCBTZWN0b3I9IlByb2R1Y3Rpb24iKSAlPiUgDQogIHJlbmFtZShWYWx1ZXMgPSBwcm9kKSAlPiUgDQogIGJpbmRfcm93cyhkc2FsZSAlPiUgDQogICAgICAgICAgbXV0YXRlKGRhdGUsIHNhbGUsIFNlY3Rvcj0iU2FsZSIpICU+JSANCiAgICAgICAgICByZW5hbWUoVmFsdWVzID0gc2FsZSkpDQpscy5zdHIoZGYpDQpgYGANCg0KTm93IHVzZSBjb2xvci9saW5ldHlwZSB0byB1c2UgZGlmZmVyZW50IGxpbmUgZm9yIGRpZmZlcmVudCBncm91cCBhbmQgYSBsZWdlbmQgd2lsbCBiZSBnZW5lcmF0ZWQgLSANCmBgYHtyfQ0KZ2dwbG90KGRmLCBhZXMoeCA9IGRhdGUsIHkgPSBWYWx1ZXMsIGNvbG9yID0gU2VjdG9yKSkgKyANCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKCJNdWx0aXBsZSBMaW5lIEV4YW1wbGUiKQ0KYGBgDQoNClVzaW5nIGxpbmUgdHlwZSAtIA0KYGBge3J9DQpnZ3Bsb3QoZGYsIGFlcyh4ID0gZGF0ZSwgeSA9IFZhbHVlcywgbGluZXR5cGUgPSBTZWN0b3IsIGNvbG9yID0gU2VjdG9yKSkgKyANCiAgZ2VvbV9saW5lKCkgKw0KICBnZ3RpdGxlKCJNdWx0aXBsZSBMaW5lIEV4YW1wbGUiKSArIA0KICBnZW9tX3BvaW50KCkNCmBgYA0KDQoNCkV4cGVydCBzb2x1dGlvbnMgdG8gW1IgU3R1ZGlvIHN0YXRpc3RpY3MgYXNzaWdubWVudHNdKGh0dHBzOi8vd3d3LmhvbWV3b3JraGVscG9ubGluZS5uZXQvcHJvZ3JhbW1pbmcvci1wcm9ncmFtbWluZyAiUiBTdHVkaW8gc3RhdGlzdGljcyBoZWxwIiku