Click the Original, Code and Reconstruction tabs to read about the issues and how they were fixed.

Original


Source:Yahoo Finance.


Objective The visualisation reveals about the stock prices of various Covid-19 Vaccine companies from year 2020 to 2021. While some companies saw a positive hike in the prices from the end of year 2020, others did not see any significant change in their prices. The main aim of this visual is to clearly show the market performance of these companies so that the investors can wisely invest their money in gain positive results.

Target Audience Since the data is sourced from the Yahoo Finance, the target audience is likely to be the Governments around the world, Institutional Investors and BioTech Companies.These parties would get the required information to manage the expenditure on Vaccines, their production, export and import. Also, General Public will come in this category as they will get the information on the performance of these companies on the worldwide scale.

The visualisation chosen had the following three main issues:

  • Graph Selection: The type of graph used to show the stock price changes for the vaccine does not solve the purpose of the visual. According to data it is clear that this is a time-series type of graph. As multiple area charts are used, one area chart for each company, a lot of data is not clearly visible on this plot. Due to overlap of the charts numerous points on the line are concealed. For instance, the area graph for Sinovac is completely covered by Pfizer and is kind of invisible.
  • Poor Color Coding: The selecttion of colors in this visualisation is not up to the mark and makes it difficult for the audience to interpret the information from the plot. The color scheme used consists of different hues of blue. As a result it becomes really difficult to interpret the exact values for the data points of one area chart overlapped by another chart. Foe example, one cannot see more than half of the data points for companies- Novavax and Moderna even though they are on the top of the list. That is, one cannot analyse the exact time frame during which the company saw a drastic increase in their stock prices.
  • Visual Bombardment: The visual is providing more than two components which is creating confusion for the audience to understand the main objective of the the graph. The visual represents everyday stock prices of eight companies over the time of 12 months. This gives too many elements to analyse further making it difficult for audience to focus on the data.

Reference

Code

The following code was used to fix the issues identified in the original.

#Packages installed
#install.packages("ggplot2", repos = 'http://cran.us.r-project.org')
#installed.packages("dplyr")
#installed.packages("tidyverse")
#install.packages("colourpicker")
#install.packages("scales")
library(ggplot2)
library(dplyr)
library(tidyverse)
library(colourpicker)
library(scales)

# Setting the working directory for the data
setwd("D:/Uni/Sem 2/Data Visualisation/Assignment 2")

# Read the data required for Data Visualisation
AZC <- read.csv("AstraZeneca.csv")
BTC <- read.csv("BioNTech.csv")
CVC <- read.csv("Curevac.csv")
JNJ <- read.csv("Johnson&Johnson.csv")
MDR <- read.csv("Moderna.csv")
NVX <- read.csv("Novavax.csv")
PZR <- read.csv("Pfizer.csv")
SNV <- read.csv("Sinovac.csv")

# Checking the structure and the class of the datasets
str(AZC)
## 'data.frame':    301 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : chr  "" "49.06" "49.45" "49.41" ...
##  $ High       : num  NA 49.1 49.7 49.8 49.8 ...
##  $ Low        : num  NA 48.3 49.2 49.4 49.3 ...
##  $ Close.     : num  NA 48.4 49.2 49.5 49.5 ...
##  $ Adj.Close..: num  NA 48.4 49.2 49.5 49.5 ...
##  $ Volume     : chr  "" "9469100" "7127800" "5294000" ...
str(BTC)
## 'data.frame':    298 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : num  29.8 29.2 34 32 31.9 ...
##  $ High       : num  30.7 32.9 34 32.9 32.5 ...
##  $ Low        : num  28.8 29.2 28.7 29.7 30.1 ...
##  $ Close.     : num  30.3 32.9 29.2 32.9 30.9 ...
##  $ Adj.Close..: num  29.9 32.5 28.9 32.5 30.5 ...
##  $ Volume     : int  177600 137600 405000 387400 166700 121700 175300 157700 107100 128700 ...
str(CVC)
## 'data.frame':    164 obs. of  7 variables:
##  $ Date       : chr  "Apr 09, 2021" "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" ...
##  $ Open       : num  90 89.9 91.6 92.5 90.5 ...
##  $ High       : num  92.4 90.5 92.4 93.1 93.4 ...
##  $ Low        : num  89.4 88.6 88.6 90.8 89.6 ...
##  $ Close.     : num  90.9 89.4 89.4 92.5 92.6 ...
##  $ Adj.Close..: num  91 89.4 89.4 92.5 92.6 ...
##  $ Volume     : int  181425 4716 6861 3712 3185 6026 4869 5038 5236 754 ...
str(JNJ)
## 'data.frame':    303 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : chr  "164" "163.55" "164.08" "163.64" ...
##  $ High       : num  164 164 165 165 164 ...
##  $ Low        : num  163 163 163 163 162 ...
##  $ Close.     : num  163 164 163 163 163 ...
##  $ Adj.Close..: num  163 164 163 163 163 ...
##  $ Volume     : int  5035400 4608000 5074200 7387100 7226600 8281500 7236300 8535100 7617900 6269800 ...
str(MDR)
## 'data.frame':    298 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : num  133 132 130 133 132 ...
##  $ High       : num  136 135 138 133 137 ...
##  $ Low        : num  132 130 128 127 130 ...
##  $ Close.     : num  134 131 134 130 133 ...
##  $ Adj.Close..: num  134 131 134 130 133 ...
##  $ Volume     : int  4517000 4380000 7438200 5218300 7269700 10015700 11061600 10814800 4017600 5696300 ...
str(NVX)
## 'data.frame':    298 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : num  173 178 176 191 184 ...
##  $ High       : num  179 179 183 191 190 ...
##  $ Low        : num  173 170 173 176 181 ...
##  $ Close.     : num  176 172 179 177 186 ...
##  $ Adj.Close..: num  176 172 179 177 186 ...
##  $ Volume     : int  1701300 1862700 1480500 2185200 1985200 2159200 1889500 3162900 3781300 7401100 ...
str(PZR)
## 'data.frame':    303 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : chr  "35.96" "36.03" "36.26" "36.44" ...
##  $ High       : num  36.1 36.2 36.4 36.6 36.5 ...
##  $ Low        : num  35.9 35.8 36 36.1 36 ...
##  $ Close.     : num  36 35.9 36 36.3 36.3 ...
##  $ Adj.Close..: num  36 35.9 36 36.3 36.3 ...
##  $ Volume     : int  18124200 21933800 20722900 22096900 21299700 26582700 26303300 27004800 27897100 24875300 ...
str(SNV)
## 'data.frame':    298 obs. of  7 variables:
##  $ Date       : chr  "Apr 08, 2021" "Apr 07, 2021" "Apr 06, 2021" "Apr 05, 2021" ...
##  $ Open       : num  6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 ...
##  $ High       : num  6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 ...
##  $ Low        : num  6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 ...
##  $ Close.     : num  6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 ...
##  $ Adj.Close..: num  6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 6.47 ...
##  $ Volume     : chr  "-" "-" "-" "-" ...
# Correcting the class of the variables
AZC$Open <- as.numeric(AZC$Open)
AZC$Volume <- as.integer(AZC$Volume)
class(AZC$Volume)
## [1] "integer"
class(AZC$Open)
## [1] "numeric"
#Convert Date column to date class
AZC$Date<- as.Date(AZC$Date, format= "%b %d, %Y")
print(AZC$Date)
##   [1] "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01"
##   [6] "2021-03-31" "2021-03-30" "2021-03-29" "2021-03-26" "2021-03-25"
##  [11] "2021-03-24" "2021-03-23" "2021-03-22" "2021-03-19" "2021-03-18"
##  [16] "2021-03-17" "2021-03-16" "2021-03-15" "2021-03-12" "2021-03-11"
##  [21] "2021-03-10" "2021-03-09" "2021-03-08" "2021-03-05" "2021-03-04"
##  [26] "2021-03-03" "2021-03-02" "2021-03-01" "2021-02-26" "2021-02-25"
##  [31] "2021-02-25" "2021-02-24" "2021-02-23" "2021-02-22" "2021-02-19"
##  [36] "2021-02-18" "2021-02-17" "2021-02-16" "2021-02-12" "2021-02-11"
##  [41] "2021-02-10" "2021-02-09" "2021-02-08" "2021-02-05" "2021-02-04"
##  [46] "2021-02-03" "2021-02-02" "2021-02-01" "2021-01-29" "2021-01-28"
##  [51] "2021-01-27" "2021-01-26" "2021-01-25" "2021-01-22" "2021-01-21"
##  [56] "2021-01-20" "2021-01-19" "2021-01-15" "2021-01-14" "2021-01-13"
##  [61] "2021-01-12" "2021-01-11" "2021-01-08" "2021-01-07" "2021-01-06"
##  [66] "2021-01-05" "2021-01-04" "2020-12-31" "2020-12-30" "2020-12-29"
##  [71] "2020-12-28" "2020-12-24" "2020-12-23" "2020-12-22" "2020-12-21"
##  [76] "2020-12-18" "2020-12-17" "2020-12-16" "2020-12-15" "2020-12-14"
##  [81] "2020-12-11" "2020-12-10" "2020-12-09" "2020-12-08" "2020-12-07"
##  [86] "2020-12-04" "2020-12-03" "2020-12-02" "2020-12-01" "2020-11-30"
##  [91] "2020-11-27" "2020-11-25" "2020-11-24" "2020-11-23" "2020-11-20"
##  [96] "2020-11-19" "2020-11-18" "2020-11-17" "2020-11-16" "2020-11-13"
## [101] "2020-11-12" "2020-11-11" "2020-11-10" "2020-11-09" "2020-11-06"
## [106] "2020-11-05" "2020-11-04" "2020-11-03" "2020-11-02" "2020-10-30"
## [111] "2020-10-29" "2020-10-28" "2020-10-27" "2020-10-26" "2020-10-23"
## [116] "2020-10-22" "2020-10-21" "2020-10-20" "2020-10-19" "2020-10-16"
## [121] "2020-10-15" "2020-10-14" "2020-10-13" "2020-10-12" "2020-10-09"
## [126] "2020-10-08" "2020-10-07" "2020-10-06" "2020-10-05" "2020-10-02"
## [131] "2020-10-01" "2020-09-30" "2020-09-29" "2020-09-28" "2020-09-25"
## [136] "2020-09-24" "2020-09-23" "2020-09-22" "2020-09-21" "2020-09-18"
## [141] "2020-09-17" "2020-09-16" "2020-09-15" "2020-09-14" "2020-09-11"
## [146] "2020-09-10" "2020-09-09" "2020-09-08" "2020-09-04" "2020-09-03"
## [151] "2020-09-02" "2020-09-01" "2020-08-31" "2020-08-28" "2020-08-27"
## [156] "2020-08-26" "2020-08-25" "2020-08-24" "2020-08-21" "2020-08-20"
## [161] "2020-08-19" "2020-08-18" "2020-08-17" "2020-08-14" "2020-08-13"
## [166] "2020-08-13" "2020-08-12" "2020-08-11" "2020-08-10" "2020-08-07"
## [171] "2020-08-06" "2020-08-05" "2020-08-04" "2020-08-03" "2020-07-31"
## [176] "2020-07-30" "2020-07-29" "2020-07-28" "2020-07-27" "2020-07-24"
## [181] "2020-07-23" "2020-07-22" "2020-07-21" "2020-07-20" "2020-07-17"
## [186] "2020-07-16" "2020-07-15" "2020-07-14" "2020-07-13" "2020-07-10"
## [191] "2020-07-09" "2020-07-08" "2020-07-07" "2020-07-06" "2020-07-02"
## [196] "2020-07-01" "2020-06-30" "2020-06-29" "2020-06-26" "2020-06-25"
## [201] "2020-06-24" "2020-06-23" "2020-06-22" "2020-06-19" "2020-06-18"
## [206] "2020-06-17" "2020-06-16" "2020-06-15" "2020-06-12" "2020-06-11"
## [211] "2020-06-10" "2020-06-09" "2020-06-08" "2020-06-05" "2020-06-04"
## [216] "2020-06-03" "2020-06-02" "2020-06-01" "2020-05-29" "2020-05-28"
## [221] "2020-05-27" "2020-05-26" "2020-05-22" "2020-05-21" "2020-05-20"
## [226] "2020-05-19" "2020-05-18" "2020-05-15" "2020-05-14" "2020-05-13"
## [231] "2020-05-12" "2020-05-11" "2020-05-08" "2020-05-07" "2020-05-06"
## [236] "2020-05-05" "2020-05-04" "2020-05-01" "2020-04-30" "2020-04-29"
## [241] "2020-04-28" "2020-04-27" "2020-04-24" "2020-04-23" "2020-04-22"
## [246] "2020-04-21" "2020-04-20" "2020-04-17" "2020-04-16" "2020-04-15"
## [251] "2020-04-14" "2020-04-13" "2020-04-09" "2020-04-08" "2020-04-07"
## [256] "2020-04-06" "2020-04-03" "2020-04-02" "2020-04-01" "2020-03-31"
## [261] "2020-03-30" "2020-03-27" "2020-03-26" "2020-03-25" "2020-03-24"
## [266] "2020-03-23" "2020-03-20" "2020-03-19" "2020-03-18" "2020-03-17"
## [271] "2020-03-16" "2020-03-13" "2020-03-12" "2020-03-11" "2020-03-10"
## [276] "2020-03-09" "2020-03-06" "2020-03-05" "2020-03-04" "2020-03-03"
## [281] "2020-03-02" "2020-02-28" "2020-02-27" "2020-02-27" "2020-02-26"
## [286] "2020-02-25" "2020-02-24" "2020-02-21" "2020-02-20" "2020-02-19"
## [291] "2020-02-18" "2020-02-14" "2020-02-13" "2020-02-12" "2020-02-11"
## [296] "2020-02-10" "2020-02-07" "2020-02-06" "2020-02-05" "2020-02-04"
## [301] "2020-02-03"
class(AZC$Date)
## [1] "Date"
BTC$Date <- as.Date(BTC$Date, format= "%b %d, %Y")
str(BTC$Date)
##  Date[1:298], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(BTC$Date)
## [1] "Date"
CVC$Date <- as.Date(CVC$Date, format= "%b %d, %Y")
str(CVC$Date)
##  Date[1:164], format: "2021-04-09" "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" ...
class(CVC$Date)
## [1] "Date"
JNJ$Date <- as.Date(JNJ$Date, format= "%b %d, %Y")
str(JNJ$Date)
##  Date[1:303], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(JNJ$Date)
## [1] "Date"
JNJ$Open <- as.numeric(JNJ$Open)
JNJ$Volume <- as.integer(JNJ$Volume)
class(JNJ$Volume)
## [1] "integer"
class(JNJ$Open)
## [1] "numeric"
MDR$Date <- as.Date(MDR$Date, format= "%b %d, %Y")
str(MDR$Date)
##  Date[1:298], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(MDR$Date)
## [1] "Date"
MDR$Volume <- as.integer(MDR$Volume)
class(MDR$Volume)
## [1] "integer"
NVX$Date <- as.Date(NVX$Date, format= "%b %d, %Y")
str(NVX$Date)
##  Date[1:298], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(NVX$Date)
## [1] "Date"
PZR$Date <- as.Date(PZR$Date, format= "%b %d, %Y")
str(PZR$Date)
##  Date[1:303], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(PZR$Date)
## [1] "Date"
PZR$Open <- as.numeric(PZR$Open)

SNV$Date <- as.Date(SNV$Date, format= "%b %d, %Y")
str(SNV$Date)
##  Date[1:298], format: "2021-04-08" "2021-04-07" "2021-04-06" "2021-04-05" "2021-04-01" ...
class(SNV$Date)
## [1] "Date"
SNV$Volume <- as.integer(SNV$Volume)
class(SNV$Volume)
## [1] "integer"
#Changing the column names
colnames(AZC) <- c('Date','AZC_open', 'AZC_High', 'AZC_Low', 'AZC_Close', 'AZC_Adj.Close', 'AZC_Volume')
colnames(AZC)
## [1] "Date"          "AZC_open"      "AZC_High"      "AZC_Low"      
## [5] "AZC_Close"     "AZC_Adj.Close" "AZC_Volume"
colnames(BTC) <- c('Date','BTC_open', 'BTC_High', 'BTC_Low', 'BTC_Close', 'BTC_Adj.Close', 'BTC_Volume')
colnames(BTC)
## [1] "Date"          "BTC_open"      "BTC_High"      "BTC_Low"      
## [5] "BTC_Close"     "BTC_Adj.Close" "BTC_Volume"
colnames(CVC) <- c('Date','CVC_open', 'CVC_High', 'CVC_Low', 'CVC_Close', 'CVC_Adj.Close', 'CVC_Volume')
colnames(CVC)
## [1] "Date"          "CVC_open"      "CVC_High"      "CVC_Low"      
## [5] "CVC_Close"     "CVC_Adj.Close" "CVC_Volume"
colnames(JNJ) <- c('Date','JNJ_open', 'JNJ_High', 'JNJ_Low', 'JNJ_Close', 'JNJ_Adj.Close', 'JNJ_Volume')
colnames(JNJ)
## [1] "Date"          "JNJ_open"      "JNJ_High"      "JNJ_Low"      
## [5] "JNJ_Close"     "JNJ_Adj.Close" "JNJ_Volume"
colnames(MDR) <- c('Date','MDR_open', 'MDR_High', 'MDR_Low', 'MDR_Close', 'MDR_Adj.Close', 'MDR_Volume')
colnames(MDR)
## [1] "Date"          "MDR_open"      "MDR_High"      "MDR_Low"      
## [5] "MDR_Close"     "MDR_Adj.Close" "MDR_Volume"
colnames(NVX) <- c('Date','NVX_open', 'NVX_High', 'NVX_Low', 'NVX_Close', 'NVX_Adj.Close', 'NVX_Volume')
colnames(NVX)
## [1] "Date"          "NVX_open"      "NVX_High"      "NVX_Low"      
## [5] "NVX_Close"     "NVX_Adj.Close" "NVX_Volume"
colnames(PZR) <- c('Date','PZR_open', 'PZR_High', 'PZR_Low', 'PZR_Close', 'PZR_Adj.Close', 'PZR_Volume')
colnames(PZR)
## [1] "Date"          "PZR_open"      "PZR_High"      "PZR_Low"      
## [5] "PZR_Close"     "PZR_Adj.Close" "PZR_Volume"
colnames(SNV) <- c('Date','SNV_open', 'SNV_High', 'SNV_Low', 'SNV_Close', 'SNV_Adj.Close', 'SNV_Volume')
colnames(SNV)
## [1] "Date"          "SNV_open"      "SNV_High"      "SNV_Low"      
## [5] "SNV_Close"     "SNV_Adj.Close" "SNV_Volume"
# Join all the data-sets
Companies <- list(AZC, BTC, CVC, JNJ, MDR, NVX, PZR, SNV) %>% reduce(inner_join, by='Date')
head(Companies)
##         Date AZC_open AZC_High AZC_Low AZC_Close AZC_Adj.Close AZC_Volume
## 1 2021-04-08       NA       NA      NA        NA            NA         NA
## 2 2021-04-07    49.06    49.12   48.26     48.42         48.42    9469100
## 3 2021-04-06    49.45    49.68   49.16     49.22         49.22    7127800
## 4 2021-04-05    49.41    49.80   49.40     49.53         49.53    5294000
## 5 2021-04-01    49.61    49.79   49.33     49.53         49.53    5958200
## 6 2021-03-31    50.04    50.13   49.70     49.72         49.72    6688300
##   BTC_open BTC_High BTC_Low BTC_Close BTC_Adj.Close BTC_Volume CVC_open
## 1    29.80    30.69   28.78     30.27      29.87431     177600    89.87
## 2    29.17    32.92   29.17     32.92      32.48967     137600    91.58
## 3    34.00    34.00   28.69     29.25      28.86764     405000    92.48
## 4    32.00    32.93   29.68     32.93      32.49954     387400    90.51
## 5    31.88    32.49   30.07     30.88      30.47634     166700    91.89
## 6    30.99    32.15   30.11     32.12      31.70013     121700    90.17
##   CVC_High CVC_Low CVC_Close CVC_Adj.Close CVC_Volume JNJ_open JNJ_High JNJ_Low
## 1    90.54   88.62     89.42         89.42       4716   164.00   164.11  162.85
## 2    92.40   88.61     89.37         89.37       6861   163.55   164.28  163.32
## 3    93.08   90.82     92.54         92.54       3712   164.08   164.52  163.00
## 4    93.39   89.59     92.58         92.58       3185   163.64   164.75  162.66
## 5    93.89   90.68     91.19         91.19       6026   162.60   163.84  162.26
## 6    92.88   90.15     91.46         91.46       4869   164.96   165.39  163.70
##   JNJ_Close JNJ_Adj.Close JNJ_Volume MDR_open MDR_High MDR_Low MDR_Close
## 1    162.97        162.97    5035400   132.85   135.90  132.06    133.88
## 2    163.61        163.61    4608000   132.37   135.16  130.21    131.47
## 3    163.39        163.39    5074200   130.11   138.25  128.16    133.53
## 4    163.43        163.43    7387100   132.60   133.19  127.04    129.91
## 5    162.83        162.83    7226600   132.20   136.64  130.34    132.55
## 6    164.35        164.35    8281500   121.10   131.80  119.33    130.95
##   MDR_Adj.Close MDR_Volume NVX_open NVX_High NVX_Low NVX_Close NVX_Adj.Close
## 1        133.88    4517000   173.39   179.25  173.00    176.27        176.27
## 2        131.47    4380000   178.03   179.00  170.49    171.77        171.77
## 3        133.53    7438200   175.85   182.72  173.11    178.76        178.76
## 4        129.91    5218300   190.77   191.00  175.88    177.29        177.29
## 5        132.55    7269700   183.50   189.77  180.76    185.82        185.82
## 6        130.95   10015700   177.54   185.13  173.85    181.31        181.31
##   NVX_Volume PZR_open PZR_High PZR_Low PZR_Close PZR_Adj.Close PZR_Volume
## 1    1701300    35.96    36.15   35.87     35.96         35.96   18124200
## 2    1862700    36.03    36.24   35.76     35.91         35.91   21933800
## 3    1480500    36.26    36.40   36.00     36.05         36.05   20722900
## 4    2185200    36.44    36.57   36.10     36.28         36.28   22096900
## 5    1985200    36.30    36.45   36.02     36.30         36.30   21299700
## 6    2159200    36.15    36.43   36.04     36.23         36.23   26582700
##   SNV_open SNV_High SNV_Low SNV_Close SNV_Adj.Close SNV_Volume
## 1     6.47     6.47    6.47      6.47          6.47         NA
## 2     6.47     6.47    6.47      6.47          6.47         NA
## 3     6.47     6.47    6.47      6.47          6.47         NA
## 4     6.47     6.47    6.47      6.47          6.47         NA
## 5     6.47     6.47    6.47      6.47          6.47         NA
## 6     6.47     6.47    6.47      6.47          6.47         NA
# Plotting the chart

options(repr.plot.width = 100, repr.plot.height = 6, repr.plot.res = 5000)

p1 <- ggplot(data= Companies, aes(x= Date, y= Price))
plot <- p1 + geom_line(aes(y=AZC_Adj.Close, col="Astra Zeneca")) +
  geom_line(aes(y=BTC_Adj.Close, col="BioNTech")) +
  geom_line(aes(y=CVC_Adj.Close, col="Curevac")) +
  geom_line(aes(y=JNJ_Adj.Close, col="Johnson & Johnson")) +
  geom_line(aes(y=MDR_Adj.Close, col="Moderna")) +
  geom_line(aes(y=NVX_Adj.Close, col="Novavax")) +
  geom_line(aes(y=PZR_Adj.Close, col="Pfizer")) +
  geom_line(aes(y=SNV_Adj.Close, col="Sinovac")) +
  labs(title="Covid-19 Stock Prices Oscillations in a Year", subtitle="Stock Price change and Highest Price Reached", caption="Source: Yahoo Finance") +
  scale_x_date(breaks = function(x) seq.Date(from = min(x), 
                                                 to = max(x), 
                                                 by = "16 months"),
                minor_breaks = function(x) seq.Date(from = min(x), 
                                                    to = max(x), 
                                                    by = "1 week")) +
  scale_y_continuous(limits = c(0,400))+ scale_fill_brewer(palette = "set1")+
  theme(axis.text=element_text(size=8), axis.title=element_text(size=10), plot.title = element_text(hjust = 0.5, size=16), plot.subtitle= element_text(hjust = 0.5, size=8))+ theme_minimal()

###Data Reference

Visual Reference:

#Irena(2021). Visualizing One Year of Fluctuating Covid-19 Vaccine Stock Prices. Retrieved from: https://howmuch.net/articles/covid-19-vaccine-stock-prices-oscillations

Irena(2021). Visualizing One Year of Fluctuating Covid-19 Vaccine Stock Prices. Retrieved from: https://howmuch.net/sources/covid-19-vaccine-stock-prices-oscillations

Yahoo Finance. Retrieved from: https://finance.yahoo.com/

Dr James Baglin(2022). Data Visualisation Chapter 5: Grammar and Vocabulary. Retrieved from: https://dark-star-161610.appspot.com/secured/_book/demos/DataVis-Week-05-Demo.html#/

Lea Waniek(2018). Customizing time and date scales in ggplot2. Retrieved from: https://www.r-bloggers.com/2018/06/customizing-time-and-date-scales-in-ggplot2/

Home - RDocumentation. Home - RDocumentation, https://www.rdocumentation.org/.

Reconstruction

The following plot fixes the main issues in the original.