#how to use ggplo2 ##by Reza Baneshi

line chart

library(tidyverse);library(tidyr);library(ggplot2);library(nlme);library(ggpubr)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.7
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## 
## Attaching package: 'nlme'
## The following object is masked from 'package:dplyr':
## 
##     collapse
library(ggplot2);library(networkD3);library(htmlwidgets);library(highcharter);library(htmlwidgets);library(networkD3)
## 
## Attaching package: 'htmlwidgets'
## The following object is masked from 'package:networkD3':
## 
##     JS
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## 
## Attaching package: 'highcharter'
## The following object is masked from 'package:networkD3':
## 
##     JS
a=ggplot(data=BOD,aes(x=Time,y=demand))
a=a+geom_point(size=5) #size of dots
a=a+geom_line(colour="red") #colour of line
a

##density plot

qplot(depth, data=diamonds, geom="density", xlim = c(54, 70))
## Warning: Removed 38 rows containing non-finite values (stat_density).

qplot(depth, data=diamonds, geom="density", xlim = c(54, 70),
      fill = cut, alpha = I(0.2))
## Warning: Removed 38 rows containing non-finite values (stat_density).

scatter plot

b=ggplot (CO2,aes(conc,uptake,colour=Treatment)) #different colours
b=b+geom_point(size=3,alpha=0.5) #size and transparency of dots
b=b+geom_smooth(method=lm,se=F) #regress lines for each treatment
b=b+facet_wrap(~Type) #split by type
b=b+labs(title="Concentration of CO2") #add title
b=b+theme_bw() #change theme
b
## `geom_smooth()` using formula 'y ~ x'

mydata=subset(mpg,(cty<25))
d=ggplot(mydata,aes(displ,cty))
d=d+geom_point(aes(colour=drv,size=trans),alpha=0.5)
d=d+geom_smooth(method=lm)
d=d+facet_wrap(~year,nrow=1)
d=d+theme_bw()
d
## Warning: Using size for a discrete variable is not advised.
## `geom_smooth()` using formula 'y ~ x'

#One-dimensional scatter plot

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
s=ggplot(ToothGrowth, aes(x=dose, y=len)) 
s=s+ geom_jitter() 
s=s+stat_summary(fun.y=mean,geom="point",shape=18,size=3, color="red")
## Warning: `fun.y` is deprecated. Use `fun` instead.
s=s+stat_summary(fun.y=median,geom="point",shape=18,size=3,color="blue")
## Warning: `fun.y` is deprecated. Use `fun` instead.
s

Box plot (add P-value)

c=ggplot (CO2,aes(Treatment,uptake))
c=c+geom_boxplot()
c=c+geom_point(alpha=0.5,aes(size=conc,colour=Plant))
c=c+facet_wrap(~Type)
c=c+coord_flip() #horisontal vs. vertical
c=c+theme_bw()
c

z=ggplot(ToothGrowth, aes(x=dose, y=len)) 
z=z+geom_boxplot()
z=z+geom_jitter(position=position_jitter(0.2))
z=z+stat_compare_means(label.x = 1.5,method="t.test",
    comparisons=list(c("0.5","1"),c("1","2"),c("0.5","2")))
z

male=rnorm(20,mean=167,sd=6.7)
female=rnorm(20,mean=154,sd=5.7)
df=data.frame(male,female)
library(tidyr)
df=gather(df,sex,height,male,female)
df
##       sex   height
## 1    male 171.0200
## 2    male 163.4221
## 3    male 172.6242
## 4    male 168.5692
## 5    male 161.4463
## 6    male 171.0580
## 7    male 168.2252
## 8    male 163.6195
## 9    male 160.8518
## 10   male 168.3494
## 11   male 167.2158
## 12   male 164.2001
## 13   male 172.1730
## 14   male 163.4914
## 15   male 165.1710
## 16   male 160.6158
## 17   male 169.9342
## 18   male 159.6438
## 19   male 168.0471
## 20   male 170.7905
## 21 female 150.9840
## 22 female 147.9987
## 23 female 160.6923
## 24 female 156.0995
## 25 female 158.4904
## 26 female 151.0008
## 27 female 167.0334
## 28 female 144.5053
## 29 female 151.1106
## 30 female 157.8171
## 31 female 148.2564
## 32 female 147.1826
## 33 female 155.7455
## 34 female 155.4675
## 35 female 139.1497
## 36 female 161.3961
## 37 female 154.7587
## 38 female 154.6253
## 39 female 154.4678
## 40 female 159.0767
library(ggpubr)
library(ggplot2)

k=ggplot(df, aes(sex,height))
k=k+geom_boxplot()
k=k+stat_compare_means(label.x = 1.5,method="t.test",
     comparisons=list(c("male","female")))
k

bb=ggplot(Oxboys, aes(Occasion, height)) 
bb=bb+ geom_boxplot()
bb=bb+geom_line(aes(group = Subject), colour = "#3366FF")
bb

Bar chart 2 categorical var (position=fill shows stock bars

#with cumu. prop. without position arguments stack frequency

dd=subset(starwars, (hair_color=="black"|hair_color=="brown"))
  
  f=ggplot(dd,aes(hair_color,fill=gender))
  f=f+geom_bar(position="dodge",alpha=0.5)
  f=f+facet_wrap(~hair_color)
  f=f+theme_bw()

f

#spogeti plot+ global line)

library(ggplot2)
library(nlme)
p=ggplot(Oxboys, aes(age, height, group = Subject)) 
p=p+geom_line()
p + geom_smooth(aes(group = Subject), method="lm", se = F) ##add subject-specific regression lines
## `geom_smooth()` using formula 'y ~ x'

p + geom_smooth(aes(group = 1), method="lm", size = 2, se = F) ## add global line
## `geom_smooth()` using formula 'y ~ x'

require(nlme, quiet = TRUE, warn.conflicts = FALSE)
model <- lme(height ~ age, data = Oxboys,random = ~ 1 + age | Subject)
kk=ggplot(Oxboys, aes(age, height, group = Subject))
kk=kk+geom_line()
kk

#dot plt + CI

age=c(18,19,20,21,22,23,24,25,26,27,28,29,30)
BMI=c(24.14,29.83,27.41,28.29,27.97,27.84,27.75,27.74,29.44,29.47,28.05,26.63,28.67)
ci=c(1.64,3.09,2.48,2.31,1.99,1.78,1.31,1.31,1.66,1.94,1.86,2.13,3.58)
data=data.frame(age,BMI,ci)
a=ggplot(data=data,aes(x=age,y=BMI))
a=a+scale_x_continuous(breaks=seq(18,30,by=1),
                       labels=c('18 yrs\nN=2','19 yrs\nN=22','20 yrs\nN=33','21 yrs\nN=42',
                                '22 yrs\nN=64',
                                '23 yrs\nN=61','24 yrs\nN=76','25 yrs\nN=94','26 yrs\nN=62',
                                '27 yrs\nN=55',
                                '28 yrs\nN=45','29 yrs\nN=27','30yrs\nN=7'))
a=a+scale_y_continuous(limits=c(0,35),breaks = seq(0,35,by=5))

a=a+geom_point(size=5)
a=a+labs(y="Average BMI (kg/m2",x="Age at diagnosis (years) and number diagnosed (N)")



a=a+theme_bw()
a=a+theme(panel.grid.major.x = element_blank(),panel.grid.minor.x = element_blank())

a=a+geom_errorbar(aes(ymin=BMI-ci,ymax=BMI+ci),width=0.5)
a

#SANKEY PLOTS

library(networkD3)
library(htmlwidgets)
## create a dataframe with 10 nodes
nodes = data.frame("name" = c("Node_0", "Node_1", "Node_2", "Node_3", "Node_4", "Node_5", 
                              "Node_6", "Node_7", "Node_8", "Node_9"))
## create edges with weights
links = as.data.frame(matrix(c(0, 5, 2, # node 0 -> node 5 with weight 2
                               0, 6, 1, # node 0 -> node 6 with weight 1
                               1, 7, 3, # node 1 -> node 7 with weight 3
                               2, 8, 2, # node 2 -> node 8 with weight 2
                               2, 9, 3, # node 2 -> node 9 with weight 3
                               3, 5, 1, # node 3 -> node 5 with weight 1
                               3, 9, 5, # node 3 -> node 9 with weight 5
                               4, 9, 2  # node 4 -> node 9 with weight 2
), byrow = TRUE, ncol = 3))
names(links) = c("source", "target", "value")

node_color <- 'd3.scaleOrdinal() .domain(["Node_0", "Node_1", "Node_2", "Node_3", "Node_4",
"Node_5", "Node_6", "Node_7", "Node_8", "Node_9"]) .range(["red", "blue", "orange" , 
"yellow", "cyan", "green", "magenta", "dodgerblue", "pink", "black"])'

p = sankeyNetwork(Links = links, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value", NodeID = "name",
                  fontSize = 16, nodeWidth = 40,colourScale = node_color)
p
attach(nodes)
attach(links)
nodes=data.frame(nodes)
links=data.frame(links)
p = sankeyNetwork(Links = links, Nodes = nodes,
                  Source = "source", Target = "target",
                  Value = "value", NodeID = "name",
                  fontSize = 16, nodeWidth = 40)
p
library(highcharter)
library(htmlwidgets)
library(dplyr)

set.seed(111)
t0=sample(x=c)
t1=sample(x=c("Hosp A","Hosp B","Hosp C"),size=100,replace=TRUE)
t2=sample(x=c("Male","Female"),size=100,replace=TRUE)
t3=sample(x=c("Survived","Died"),size=100,replace=TRUE)
d=data.frame(cbind(t1,t2,t3))
names(d)=c('Hospital','Gender','Outcome')


pl=hchart(data_to_sankey(d),"sankey",name="Hospital and Gender based Outcomes")
pl%>%
  hc_title(text="Sankey Diagram")%>%
  hc_subtitle(text="Hospital and Gender based Outcomes")%>%
  hc_caption(text="this is my caption")
htmlwidgets::saveWidget(widget=pl,file="P:\\map.html") 




library(networkD3)

id=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
name=c("low2000","healthy2000","over2000","obese2000",
       "low2003","healthy2003","over2003","obese2003",
       "low2006","healthy2006","over2006","obese2006",
       "low2009","healthy2009","over2009","obese2009")

nodes=data.frame(id,name)

source=c(0,0,0,0,
         1,1,1,1,
         2,2,2,2,
         3,3,3,3,
         4,4,4,4,
         5,5,5,5,
         6,6,6,6,
         7,7,7,7,
         8,8,8,8,
         9,9,9,9,
         10,10,10,10,
         11,11,11,11)

target=c(4,5,6,7,
         4,5,6,7,
         4,5,6,7,
         4,5,6,7,
         8,9,10,11,
         8,9,10,11,
         8,9,10,11,
         8,9,10,11,
         12,13,14,15,
         12,13,14,15,
         12,13,14,15,
         12,13,14,15)



value=c(10,20,30,5,
        30,40,10,7,
        10,25,11,24,
        30,50,34,17,
        12,21,19,5,
        12,10,25,3,
        16,9,6,41,
        5,8,4,12,
        27,32,21,25,
        12,10,25,23,
        23,18,25,18,
        21,14,38,41)

links=data.frame(source,target,value)

my_color <- 'd3.scaleOrdinal() .domain(["low2000", "healthy2000","over2000", "obese2000",
                                        "low2003", "healthy2003", "over2003", "obese2003",
                                        "low2006", "healthy2006", "over2006", "obese2006",
                                        "low2009", "healthy2009", "over2009", "obese2009"])
                                 .range(["blue", "orange", "yellow", "green", 
                                         "blue", "orange", "yellow", "green",
                                         "blue", "orange", "yellow", "green",
                                         "blue", "orange", "yellow", "green"])'

r=sankeyNetwork(Links=links,Nodes=nodes,Source="source",Target="target",Value="value",NodeID="name",
                fontSize=11,nodeWidth = 20,fontFamily = "sans-serif",iterations=0,colourScale = my_color)
r
saveWidget(widget=r,file="P:\\r.html")