Showing posts with label plot. Show all posts
Showing posts with label plot. Show all posts

Plotting in R Part V - Date Axis

In this tutorial we will look at the some tips to work with date (date and time).
Working with time stamp scale is different from let say a continuous or discrete scale.

The data source link.



Lets look at the basic plot


# Load libraries
library(ggplot2)

# The set your working directory
setwd("C:/R_Train") # please replace with your own directory


# read the data into a dataframe
tbl <- read.csv("Sample Data/temp.csv")

# convert time stamp
tbl$Time_Stamp <- as.POSIXct(tbl$Time_Stamp, format="%m/%d/%Y %H:%M")

# basic plot
ggplot(tbl, aes(x=Time_Stamp, y=Area)) + 
  geom_line(size = .5, color = "blue") + geom_point(size = 1, color = "darkgreen") +
  theme(panel.grid.major.x = element_line(color="chocolate4"), 
        panel.grid.minor.x = element_line(color = "cyan4")) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4')) +
  theme(axis.title.x = element_text(size = 25, color = "navajowhite4", face = "bold"))+
  theme(axis.title.y = element_text(size = 25, color = "navajowhite4", face = "bold")) +
  theme(axis.text.x = element_text(size = 15))+
  theme(axis.text.y = element_text(size = 15)) +
  theme(plot.margin = unit(c(0, 0, 20, 20), "pt"))




Now let see how to set the x scale. Let say major axis every hour.

Code

ggplot(tbl, aes(x=Time_Stamp, y=Area)) + 
  geom_line(size = .5, color = "blue") + geom_point(size = 1, color = "darkgreen") +
  theme(panel.grid.major.x = element_line(color="chocolate4"), 
        panel.grid.minor.x = element_line(color = "cyan4")) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4')) +
  theme(axis.title.x = element_text(size = 25, color = "navajowhite4", face = "bold"))+
  theme(axis.title.y = element_text(size = 25, color = "navajowhite4", face = "bold")) +
  theme(axis.text.x = element_text(size = 15))+
  theme(axis.text.y = element_text(size = 15)) +
  theme(plot.margin = unit(c(0, 0, 20, 20), "pt")) +
  scale_x_datetime(breaks = "hour")

Output


As you can see the overlapping of x axis text (label). We can fix it by changing angle.

Code

ggplot(tbl, aes(x=Time_Stamp, y=Area)) + 
  geom_line(size = .5, color = "blue") + geom_point(size = 1, color = "darkgreen") +
  theme(panel.grid.major.x = element_line(color="chocolate4"), 
        panel.grid.minor.x = element_line(color = "cyan4")) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4')) +
  theme(axis.title.x = element_text(size = 25, color = "navajowhite4", face = "bold"))+
  theme(axis.title.y = element_text(size = 25, color = "navajowhite4", face = "bold")) +
  theme(axis.text.x = element_text(size = 15))+
  theme(axis.text.y = element_text(size = 15)) +
  theme(plot.margin = unit(c(0, 0, 20, 20), "pt")) +
  scale_x_datetime(breaks = "hour") + 
  theme(axis.text.x = element_text(size = 6,angle = 90))

Output



It is possible to change the scale in different scales, for example every 4 hours.

Code

ggplot(tbl, aes(x=Time_Stamp, y=Area)) + 
  geom_line(size = .5, color = "blue") + geom_point(size = 1, color = "darkgreen") +
  theme(panel.grid.major.x = element_line(color="chocolate4"), 
        panel.grid.minor.x = element_line(color = "cyan4")) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4')) +
  theme(axis.title.x = element_text(size = 25, color = "navajowhite4", face = "bold"))+
  theme(axis.title.y = element_text(size = 25, color = "navajowhite4", face = "bold")) +
  theme(axis.text.x = element_text(size = 15))+
  theme(axis.text.y = element_text(size = 15)) +
  theme(plot.margin = unit(c(0, 0, 20, 20), "pt")) +
  scale_x_datetime(breaks = "4 hour")
  theme(axis.text.x = element_text(size = 10,angle = 90))

Output



But if you still need the hourly x scale. You can do with minor breaks.

Code

ggplot(tbl, aes(x=Time_Stamp, y=Area)) + 
  geom_line(size = .5, color = "blue") + geom_point(size = 1, color = "darkgreen") +
  theme(panel.grid.major.x = element_line(color="chocolate4"), 
        panel.grid.minor.x = element_line(color = "cyan4")) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4')) +
  theme(axis.title.x = element_text(size = 25, color = "navajowhite4", face = "bold"))+
  theme(axis.title.y = element_text(size = 25, color = "navajowhite4", face = "bold")) +
  theme(axis.text.x = element_text(size = 15))+
  theme(axis.text.y = element_text(size = 15)) +
  theme(plot.margin = unit(c(0, 0, 20, 20), "pt")) +
  scale_x_datetime(breaks = "4 hour", minor_breaks = "1 hours")
  theme(axis.text.x = element_text(size = 10,angle = 90))

Output



That is the end of Part V of Plotting In R. 

If you have any specific request configuring ggplot2, please leave a comment. 
I will try to add to in the current posts or cover that in future posts.





Plotting in R Part III - Background

In Part I, I have discussed about the basic plot and axis modification/enhancement
In Part II, I have discussed about grid line modification/enhancement

Recap:

The libraries and data set needed. 
Library: ggplot2, stringr
Dataset: iris (to be loaded from local drive)
IDE: RStudio

# First load the library
library(ggplot2)

library(stringr)
library(ggpubr)
library(jpeg)

# The set your working directory
setwd("C:/R_Train") # please replace with your own directory

# Read the file and create a data frame
tbl <- read.csv("Sample Data/iris.csv")


Get the csv file  from here.
data source 


Modify the Backgrounds
  • Modify the panel background

Code
ggplot(tbl, aes(x=Name, y=SepalLength, fill = Name)) + 
  geom_bar(stat="identity", width = 0.3) +
  theme(axis.title.x = element_text(size = 20, color = "blue", face = "italic")) +
  theme(axis.text.x = element_text(size = 10, color = "firebrick3", face = "bold")) +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) + 
  theme(axis.title.y = element_text(size = 20, color = "blue", face = "italic")) +
  scale_y_continuous(limits = c(0,350), breaks = seq(0,350,50)) +
  scale_fill_manual("legend", values = c("Iris-setosa"  = "indianred3", "Iris-versicolor" = "lightcyan4", "Iris-virginica" = "darkolivegreen4")) +
  theme(panel.grid = element_blank()) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black'))


fill = 'bisque2' - as it says its the fill color
colour = 'black' - this is the border color


Output



  • Modify the plot background
Code
ggplot(tbl, aes(x=Name, y=SepalLength, fill = Name)) + 
  geom_bar(stat="identity", width = 0.3) +
  theme(axis.title.x = element_text(size = 20, color = "blue", face = "italic")) +
  theme(axis.text.x = element_text(size = 10, color = "firebrick3", face = "bold")) +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) + 
  theme(axis.title.y = element_text(size = 20, color = "blue", face = "italic")) +
  scale_y_continuous(limits = c(0,350), breaks = seq(0,350,50)) +
  scale_fill_manual("legend", values = c("Iris-setosa"  = "indianred3", "Iris-versicolor" = "lightcyan4", "Iris-virginica" = "darkolivegreen4")) +
  theme(panel.grid = element_blank()) +
  theme(panel.background = element_rect(fill = 'bisque2', colour = 'black')) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4'))

fill = 'aquamarine3'as it says its the fill color
colour = 'coral4' this is the border color

Output





  • Add image as background
To do this you need to install packages ggpubr, jpeg

For this tutorial purposes I have created a image.




Code
# load image
img <- readJPEG("Posts/ggplot3/backgg.jpg")

ggplot(tbl, aes(x=Name, y=SepalLength, fill = Name)) + 
  background_image(img) +
  geom_bar(stat="identity", width = 0.3) +
  theme(axis.title.x = element_text(size = 20, color = "blue", face = "italic")) +
  theme(axis.text.x = element_text(size = 10, color = "firebrick3", face = "bold")) +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) + 
  theme(axis.title.y = element_text(size = 20, color = "blue", face = "italic")) +
  scale_y_continuous(limits = c(0,350), breaks = seq(0,350,50)) +
  scale_fill_manual("legend", values = c("Iris-setosa"  = "indianred3", "Iris-versicolor" = "lightcyan4", "Iris-virginica" = "darkolivegreen4")) +
  theme(panel.grid = element_blank()) +
  theme(plot.background = element_rect(fill = 'aquamarine3', colour = 'coral4'))

Please note the image is added before box plot is plotted in the code.

Output




That is the end of part III of Plotting In R. 

If you have any specific request configuring ggplot2, please leave a comment. I will try to add to in the current posts or cover that in future posts.