## Data Visualization with R

# Introduction

Visualizing the data is important as it makes it easier to understand large amount of complex data using charts and graphs than studying documents and reports. It helps the decision makers to grasp difficult concepts, identify new patterns and get a daily or intra-daily view of their performance. Due to the benefits it possess, and the rapid growth in analytics industry, businesses are increasingly using data visualizations; which can be assessed from the prediction that the data visualization market is expected to grow annually by 9.47% to $7.76 billion by 2023 from $4.51 billion in 2017.

R is a programming language and a software environment for statistical computing and graphics. It offers inbuilt functions and libraries to present data in the form of visualizations. It excels in both basic and advanced visualizations using minimum coding and produces high quality graphs on large datasets.

This article will demonstrate the use of its packages ggplot2 and plotly to create visualizations such as scatter plot, boxplot, histogram, line graphs, 3D plots and Maps.

### 1. ggplot2

1 2 3 4 5 6 7 |
#install package ggplot2 install.packages("ggplot2") #load the package library(ggplot2) |

There are a lot of datasets available in R in package ‘datasets’, you can run the command data() to list those datasets and use any dataset to work upon. Here I have used the dataset named ‘economics’ which gives the monthly U.S. data of various economic variables like unemployment for the time period 1967-2015.

You can view the data using view function-

1 |
view(economics) |

### Scatter Plot

We’ll make a simple scatter plot to view how unemployment has fluctuated over the years by using plot function-

1 |
plot(x = economics$date, y = economics$unemploy) |

ggplot() is used to initialize the ggplot object which can be used to declare the input dataframe and set of plot aesthetics. We can add geom components to it that acts as its layer and are used to specify the plot’s features.

We would use its feature geom point which is used to create scatter plots.

1 |
ggplot(data = economics, aes(x = date , y = unemploy)) + geom_point() |

### Modifying Plots

We can modify the plot like its color, shape, size etc. using geom_point aesthetics.

1 |
ggplot(data = economics, aes(x = date , y = unemploy)) + geom_point(size = 3) |

Lets view the graph by modifying its color-

1 |
ggplot(data = economics, aes(x = date , y = unemploy)) + geom_point(size = 3, color = "blue") |

### Boxplot

Boxplot is a method of graphically depicting groups of numerical data through their quartiles. a geom boxplot layer of ggplot is used to create boxplot of the data.

1 |
ggplot(data = economics, aes(x = date , y = unemploy)) + geom_boxplot() |

When there is overplotting, one or more points are in the same place and we can’t tell by looking at the plot that how many points are there. In that case, we can use the jitter geom which adds a small amount of variation to the location of each point that is it slightly moves the point, which is used to spread out the points that would otherwise be overplotted.

1 2 |
ggplot(data = economics, aes(x = date , y = unemploy)) + geom_jitter(alpha = 0.5, color = "red") + geom_boxplot(alpha = 0) |

### Line Graph

We can view the data in the form of a line graph as well using geom_line.

1 |
ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() |

To change the names of the axis and to give a title to the graph, use labs feature-

1 2 3 |
ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line() + labs(title = "Number of unemployed people in U.S.A. from 1967 to 2015", x = "Year", y = "Number of unemployed people") |

Let’s group the data according to year and view how average unemployment fluctuated through these years.

We will load dplyr package to manipulate our data and lubridate package to work with date column.

1 2 3 |
library(dplyr) library(lubridate) |

Now we will use mutate function to create a column year from the date column given in economics dataset by using the year function of lubridate package. And then we will group the data according to year and summarise it according to average unemployment-

1 2 3 4 5 6 7 |
economics_update<- economics %>% mutate(year = year(date)) %>% group_by(year) %>% summarise(avg_unempl = mean(unemploy)) |

Now, lets view the data as a line plot using line geom of ggplot2

1 |
ggplot(data = economics_update, aes(x = year , y = avg_unempl)) + geom_bar(stat = “identity”) |

(Since here we want the height of the bar be equal to avg_unempl, so we need to specify stat equal to identity)

### Plotting Time Series Data

In this section, I’ll be using a dataset that records the number of tourists who visited India from 2001 to 2015 which I have rearranged such that it has 3 columns, country, year and number of tourists arrived.

To visualize the plot of the number of tourists that visited the countries over the years in the form of line graph, we use geom_line-

1 |
ggplot(data = tourist1, aes(x = year, y = number_tourist)) + geom_line() |

Unfortunately, we get this graph which looks weird because we have plotted all the countries data together.

So, we group the graph by country by specifying it in aesthetics-

1 |
ggplot(data = tourist1, aes(x = year, y = number_tourist, group = Country)) + geom_line() |

To better view the graph that distinguishes countries and is bigger in size, we can specify color and size-

1 2 |
ggplot(data = tourist1, aes(x = year, y = number_tourist, group = Country, color = Country)) + geom_line(size = 1) |

### Faceting

Faceting is a feature in ggplot which enables us to split one plot into multiple plots based on some factor. We can use it to visualize one-time series for each factor separately-

1 2 |
ggplot(data = tourist1, aes(x = year, y = number_tourist, group = Country, color = Country)) + geom_line(size = 1) + facet_wrap(~Country) |

For convenience purpose, you can change the theme of the background as well, here I am keeping the theme as white-

1 2 3 |
ggplot(data = tourist1, aes(x = year, y = number_tourist, group = Country, color = Country)) + geom_line(size = 1) + facet_wrap(~Country) + theme_bw() |

These were some basic functions of ggplot2, for more functions, check out the official guide.

### 2. Plotly

Plotly is deemed to be one of the best data visualization tools in the industry.

### Line graph

Lets construct a simple line graph of two vectors by using plot_ly function that initiates a visualization in plotly. Since we are creating a line graph, we have to specify type as ‘scatter’ and mode as ‘lines’.

1 |
plot_ly(x = c(1,2,3), y = c(10,20,30), type = "scatter", mode = "lines") |

Now let’s create a line graph using the economics dataset that we used earlier-

1 |
plot_ly(x = economics$date, y = economics$unemploy, type = "scatter", mode = "lines") |

Now, we’ll use the dataset ‘women’ that is available in R which records the average height and weight of American women.

### Scatter Plot

Now lets create a scatter plot for which we need to specify mode as ‘markers’ –

1 |
plot_ly(x = women$height, y = women$weight, type = "scatter", mode = "markers") |

### Bar Chart

Now, to create a bar chart, we need to specify the type as ‘bar’.

1 |
plot_ly(x = women$height, y = women$weight, type = "bar") |

### Histogram

To create a histogram in plotly, we need to specify the type as ‘histogram’ in plot_ly.

#### 1. Normal distribution

Let x follow a normal distribution with n=200

1 |
X < -rnorm(200) |

We then plot this normal distribution in histogram,

1 |
plot_ly(x = x, type = "histogram") |

Since its a normally distributed data, so the shape of this histogram is bell-shaped.

#### 2. Chi-Square Distribution

Let y follow a chi square distribution with n = 200 and df = 4,

1 |
y = rchisq(200, 4) |

Then, we construct a histogram of y-

1 |
plot_ly(x = y, type = "histogram") |

### Boxplot

We will build a boxplot of a normally distributed data, fr that we need to specify the type as ‘box’.

1 |
plot_ly(x = rnorm(200, 0, 1), type = "box") |

here x follows a normal distribution with mean 0 and sd 1,

### Adding Traces

We can add multiple traces to the plot using pipelines and add_trace feature-

1 2 3 |
plot_ly(x = iris$Sepal.Length, y = iris$Sepal.Width, type = "scatter", mode = "markers")%>% add_trace(x = iris$Petal.Length, y = iris$Petal.Width) |

Now let’s construct two boxplots from two normally distributed datasets, one with mean 0 and other with mean 1-

1 2 3 |
plot_ly(x = rnorm(100, 0), type = "box")%>% add_trace(x = rnorm(50, 1)) |

### Modifying the Plot

Now, let’s modify the size and color of the plot, since the mode is a marker, so we would specify the marker as a list with the modifications that we require.

1 2 |
plot_ly(x = women$height, y = women$weight, type = "scatter", mode = "markers", marker = list(size = 10, color = "red")) |

We can modify points individually as well if we know the number of points in the graph-

1 2 3 |
plot_ly(x = c(1,2,3), y = c(3,6,9), type = "scatter", mode = "markers", size = c(1,5,10), marker = list(color = c("green", "blue", "red"))) |

We can modify the plot using the layout function as well which allows us to customize the x-axis and y-axis. We can specify the modifications in the form of a list-

1 2 3 4 5 6 7 |
plot_ly(x = women$height, y = women$weight, type = "scatter", mode = "markers", marker = list(size = 10, color = "red"))%>% layout(title = "scatter plot", xaxis = list(showline = T, title = "Height"), yaxis = list(showline = T, title = "Weight")) |

*Here, we have given a title to the graph and the x-axis and y-axis as well. Also, we have the X-axis line and Y-axis line*

Let’s say we want to distinguish the points in the plot according to a factor-

1 2 |
plot_ly(x = iris$Sepal.Length, y = iris$Sepal.Width, type = "scatter", color = ~iris$Species, colors = "Set1") |

*here, if we don’t specify the mode, it will set the mode to ‘markers’ by default*

### Mapping Data to Symbols

We can map the data into differentiated symbols so that we can view the graph better for different factors-

1 2 |
plot_ly(x = iris$Sepal.Length, y = iris$Sepal.Width, type = "scatter", mode = “markers”, symbol = ~iris$Species) |

*here, the points pertaining to 3 factors are distinguished by symbols that R assigned to it.*

We can customize the symbols as well-

1 2 |
plot_ly(x = iris$Sepal.Length, y = iris$Sepal.Width, type = "scatter", mode = “makers”, symbol = ~iris$Species, symbols = c("circle", "x", "o")) |

### 3D Line Plot

We can construct a 3D plot as well by specifying it in type. Here we are constructing a 3D line plot-

1 2 |
plot_ly(x = c(1,2,3), y = c(2,4,6), z = c(3,6,9), type = "scatter3d", mode = "lines") |

### Map Visualization

We can visualize map as well by specifying in type as ‘scattergeo’. Since its a map, so we need to specify lattitude and longitude.

1 |
plot_ly(lon = c(40, 50), lat = c(10, 20), type = "scattergeo", mode = "markers") |

We can modify the map as well. Here we have increased the size of the points and changed its color. We have also added text that is the location of the point which would show the location name when the cursor is placed on it.

1 2 |
plot_ly(lon = c(-95, 80), lat = c(30, 20), type = "scattergeo", mode = "markers", size = 10, color = "Set2", text = c("U.S.A.", "India")) |

These were some of the visualizations from package ggplot2 and plotly. R has various other packages for visualizations like graphics and lattice. Refer to the official documentation of R to know more about these packages.

To know more about our Data Science course, click below

**Follow this link**, if you are looking to **learn data science online!**

You can **follow this link for our Big Data course!**

Additionally, if you are having an interest in **learning Data Science, click here to start the Best Online Data Science Courses**

Furthermore, if you want to read more about data science, read our **Data Science Blogs**