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