Algoritma & Struktur Data

~ Tugas 6 ~


Kontak : \(\downarrow\)
Email
Jurusan Fisika Medis
RPubs https://rpubs.com/sharongracia/

Visualisasi data merupakan sebuah teknik dalam memperoleh informasi suatu data ke dalam bentuk visual, seperti bagan, grafik, dan juga peta. Dengan ini, data jadi lebih mudah untuk dipahami oleh pembaca, serta dapat dengan mudah menemukan pola yang muncul dari kelompok data tersebut.

Univariant (Satu Variabel)

Visualisasi data ini biasa dgunakan untuk mendistribusi data dri satu variabel.

Variabel Kategori

Diagram Batang

Diagram batang menggunakan batang horizontal atau vertikal untuk menampilkan perbandingan antar kategori. Semakin panjang sebuah batang, maka semakin besar nilai yang diwakilinya.

Berikut ini adalah visualisasi pdiagram batang dari data zodiacs.

library(ggplot2)                                                                # bentuk visualisasi
#setwd("C:/Users/YEPRI/Desktop/")                                               # atur working directory 
Marriage <- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv")                                     # memanggil data  
ggplot(Marriage, aes(x = zodiacs)) +                                            # memplot pembagian data Zodiacs  
  geom_bar(fill = "cornflowerblue",
           color = "azure4") +                                                  # mengganti warna diagram 
  theme_minimal() +                                                             # menggunakan tema 
  labs(x= "Zodiacs",                                                            # memberi label dan judul diagram 
       y= "Frequency",
       title= "Marriage Participants by Zodiacs")

Visualisasi diagram batang dengan frekuesi menggunakan persentase:

library(ggplot2)
ggplot(Marriage,
   aes(x = zodiacs,
       y = ..count.. / sum(..count..))) +
  geom_bar(fill = rainbow(12),
           color = "azure4") +
  theme_minimal() +
  labs(x = "Zodiacs",
       y = "Frequency persent",
       title = "Marriage Participant Frequency in Persent") +
  scale_y_continuous(labels = scales::percent)

Visualisai bentuk diagram batang dengan mengurutkan data dari yang terkecil hingga terbesar.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
plotdata <- Marriage %>%
  count(zodiacs)
ggplot(plotdata,
       aes(x = reorder(zodiacs, n),
           y = n)) +
  geom_bar(stat = "identity",
           fill = rainbow(12),
           color = "azure4") +
  theme_minimal() +
  labs(x = "Zodiacs",
       y = "Frequency",
       title = "Sorting Marriage Participant")

Visualisasi diagram batang dengan label nilai di setiap batangnya.

library(dplyr)
library(ggplot2)
library(scales)
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
ggplot(plotdata,
       aes(x = reorder(zodiacs, -pct),
           y = pct)) +
  geom_bar(stat = "identity",
           fill = rainbow(12),
           color = "azure4") +
  geom_text(aes(label = pctlabel),
            vjust = -0.25) +
  theme_minimal() +
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiacs",
       y = "Percent",
       title = "Marriage Participant with Labels")

Visualisasi diagram batang dengan label pada sumbu x miring agar tidak bertumpuk-tumpuk.

library(ggplot2)
library(scales)
ggplot(plotdata,
       aes(x = reorder(zodiacs, -pct),
           y = pct)) +
  geom_bar(stat = "identity",
           fill = rainbow(12),
           color = "azure4") +
  geom_text(aes(label = pctlabel),
            vjust = -0.25) +
  scale_y_continuous(labels = percent) +
  theme_minimal() +
  labs(x = "Zodiacs",
       y = "Percent",
       title = "Marriage Participant with Overlapping Labels") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

Visualisasi diagram batang sumbu x dan sumbu y bertukar tempat.

library(ggplot2)
library(scales)
ggplot(plotdata,
       aes(x = reorder(zodiacs, -pct),
           y = pct)) +
  geom_bar(stat = "identity",
           fill = rainbow(12),
           color = "azure4") +
  geom_text(aes(label = pctlabel),
            hjust = -0.10) +
  theme_minimal() +
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiacs",
       y = "Percent",
       title = "Marriage Participant with Overlapping Labels II") +
  coord_flip()

Diagram Pai

Diagram lingkaran atau yang sering juga disebut sebagai pie chart adalah salah satu jenis grafik yang digunakan untuk membandingkan statistik. Diagram lingkaran atau pie chart disebut demikian karena bentuknya adalah lingkaran dengan potongan-potongan yang menyerupai kue pie.

Berikut ini adalah bentuk visualisasi data menggunakan diagram pai.

library(dplyr)
library(ggplot2)
library(scales)
plotdata <- Marriage %>%
  count(race) %>%
  arrange(desc(race)) %>%
  mutate(prop = round(n*100/sum(n),1),
         lab.ypos = cumsum(prop) - 0.5*prop)
mycols <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(plotdata,
       aes(x = "",
           y = prop,
           fill = race)) +
  geom_bar(width = 1,
           stat = "identity",
           color = "white") +
  coord_polar("y",
              start = 0) +
  geom_text(aes(y = lab.ypos, 
                label = prop),
            color = "white") +
  scale_fill_manual(values = mycols) +
  theme_void() +
  labs(title = "Marriage Participant by Race")

Visualisasi data dengan diagram donat.

library(ggplot2)
library(scales)
ggplot(plotdata,
       aes(x = 2,
           y = prop,
           fill = race)) +
  geom_bar(stat = "identity",
           color = "white") +
  coord_polar(theta = "y",
              start = 0) +
  geom_text(aes(y = lab.ypos, 
                label = prop),
            color = "white") +
  scale_fill_manual(values = mycols) +
  theme_void() +
  xlim(0.5, 2.5) +
  labs(title = "Marriage Participant by Race II")

Visualisasi data dengan diagram donat dengan menambahkan label nama di dalamnya.

library(ggplot2)
library(scales)
plotdata$percent <- paste0(plotdata$race, "\n",
                           round(plotdata$prop), "%")

ggplot(plotdata, aes(x = 2,
                     y = prop,
                     fill = race)) +
  geom_bar(stat = "identity",
           color = "white") +
  coord_polar(theta = "y",
              start = 0) +
  geom_text(aes(y = lab.ypos, 
                label = percent),
            color = "white") +
  scale_fill_manual(values = mycols) +
  theme_void() +
  xlim(0.5, 2.5) +
  labs(title = "Marriage Participant by Race III")

Peta Pohon

Peta pohon mampu menangani variabel kategorikal yang memiliki banyak tingkatan.

Berikut adalah visualisasi data dengan peta pohon:

library(ggplot2)
library(treemapify)
## Warning: package 'treemapify' was built under R version 4.1.2
library(scales)
plotdata <- Marriage %>%
  count(officialTitle)
ggplot(plotdata,
       aes(fill = officialTitle,
           area = n)) +
  geom_treemap() +
  labs(title = "Marriage Participant by Offciate")

Bentuk visualisasi data dengan peta pohon dengan menambahkan label.

ggplot(plotdata,
       aes(fill = officialTitle,
           area = n,
           label = officialTitle)) +
  geom_treemap() +
  geom_treemap_text(colour = "white",
                    place = "centre") +
  labs(title = "Marriage Participant by Officiate II") +
  theme(legend.position = "none")

Variabel Kontinu

Histogram

Histogram merupakan tampilan bentuk grafis untuk menunjukkan distribusi data secara visual atau seberapa sering suatu nilai yang berbeda itu terjadi dalam suatu kumpulan data.

Berikut ini adalah bentuk visualisasi data dengan histogram.

library(ggplot2)
ggplot(Marriage, aes(x = age)) +
  geom_histogram(fill = "cornflowerblue",
                 color = "white", bins = 20) +
  theme_minimal() +
  labs(title = "Marriage Participant by Age (Basic)",
       x = "Age")

Visualisasi data dalam persen menggunakan histogram.

library(ggplot2)
library(scales)
ggplot(Marriage,
       aes(x = age,
           y = ..count.. / sum(..count..))) +
  geom_histogram(fill = "cornflowerblue",
                 color = "white",
                 binwidth = 5) +
  theme_minimal() +
  labs(title = "Marriage Participants by Age with Percent",
       y = "Percent",
       x = "Age") +
  scale_y_continuous(labels = percent)

Plot Densitas Kernel

Plot Densitas Kernel adalah metode non-parametik untuk memperkirakan fungsi densitas probabilitas dari variabel acak kontinu.

Berikut ini adalah visualisasi data dengan plot densitas kernel.

library(ggplot2)
ggplot(Marriage,
       aes(x = age)) +
  geom_density(fill = "indianred3") +
  theme_minimal() +
  labs(title = "Marriage Participant with Plot Densitas Kernel")

Parameter Penghalus (Smoothing)

Berikut ini adalah bentuk visualisasi data dengan menambahkan parameter penghalus.

library(ggplot2)
bw.nrd0(Marriage$age)
## [1] 5.181946
ggplot(Marriage,
       aes(x = age)) +
  geom_density(fill = "deepskyblue",
               bw = 1) +
  theme_minimal() +
  labs(title = "Marriage Participant with Smoothing",
       subtitle = "bandwidth = 1")

Diagram Titik

Diagram titik adalah suatu gambaran untuk memperlihatkan atau menerangkan suatu data yang akan disajikan menggunakan titik-titik.

Berikut ini adalah visualisasi data dalam bentuk diagram titik.

library(ggplot2)
ggplot(Marriage,
       aes(x = age)) +
  geom_dotplot(fill = "gold",
               color = "azure4",
               binwidth = 2) +
  theme_minimal() +
  labs(title = "Marriage Participant with Dotplot",
       y = "Proportion",
       x = "Age")

Data Bivariat

Kategorikal vs. Kategorikal

Diagram Batang Bertumpuk

Berikut ini adalah visualisasi data menggunakan diagram batang bertumpuk.

library(ggplot2)
mpg$drv <- factor(mpg$drv,
                  levels = c("f", "r", "4"),
                  labels = c("front-wheel", "rear-wheel", "4-wheel"))
ggplot(mpg,
       aes(x = class,
           fill = drv)) +
  geom_bar(position = "fill") +
  theme_minimal() +
  labs(y = "Proportion")

Diagram Batang yang dikelompokan

Berikut ini adalah visualisasi data menggunakan diagram batang yang dikelompokan:

library(ggplot2)
ggplot(mpg,
       aes(x = class,
           fill = drv)) +
  theme_minimal() +
  geom_bar(position = position_dodge(preserve = "single"))

Diagram Batang tersegmentasi

berikut ini adalah visualisasi data menggunakan diagram batang tersegmentasi:

library(ggplot2)
library(dplyr)
library(scales)
plotdata <- mpg %>%
  group_by(class,drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
## `summarise()` has grouped output by 'class'. You can override using the `.groups` argument.
ggplot(plotdata,
       aes(x = factor(class),
           y = pct,
           fill = factor(drv))) +
  geom_bar(stat = "identity",
           position = "fill") +
  scale_y_continuous(breaks = seq(0, 1, 2),
                     label = percent) +
  geom_text(aes(label = lbl),
            size = 3,
            position = position_stack(vjust = 0.5)) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +
  labs(y = "Percent",
          fill = "Drive Train",
          x = "Class",
          title = "Automobile Drive by Class")

Plot Mosaik

Berikut ini adalah bentuk visualisasi data denagan plot mosaik:

tbl <- xtabs(Freq ~ Survived + Class + Sex, Titanic)
ftable(tbl)
##                Sex Male Female
## Survived Class                
## No       1st        118      4
##          2nd        154     13
##          3rd        422    106
##          Crew       670      3
## Yes      1st         62    141
##          2nd         25     93
##          3rd         88     90
##          Crew       192     20
library(vcd)
## Warning: package 'vcd' was built under R version 4.1.2
## Loading required package: grid
mosaic(tbl, main = "Titanic Data")

Visualisasi data dengan menambahkan warna kedalam plot mosaik:

mosaic(tbl,
       shade = TRUE,
       legend = TRUE,
       labeling_args = list(set_varnames = c(Sex = "Gender",
                                             Survived = "Survived",
                                             Class = "Passenger Class")),
       set_labels = list(Survived = c("No", "Yes"),
                         Class = c("1st", "2nd", "3rd", "Crew"),
                         Sex = c("F", "M")),
       main = "Titanic Data II")

Kontinu vs. Kontinu

Plot Sebaran

Berikut ini adalah bentuk visualisasi data menggunakan pola - pola dalam plot sebaran:

#Visualisasi Data
library(ggplot2)
#Untuk Tema
library(hrbrthemes)
## Warning: package 'hrbrthemes' was built under R version 4.1.2
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
##       Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
##       if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
#Membuat Data
d1 <- data.frame(x = seq(1,100),
                 y = rnorm(100),
                 name = "No Trend")
d2 <- d1 %>%
  mutate(y = x*10 + rnorm(100,sd = 60)) %>%
  mutate(name = "Linear Relationship")
d3 <- d1 %>%
  mutate(y = x^2 + rnorm(100, sd = 140)) %>%
  mutate(name = "Square")
d4 <- data.frame(x = seq(1, 10, 0.1),
                 y = sin(seq(1, 10, 0.1)) +
                   rnorm(91, sd = 0.6)) %>%
  mutate(name = "Sin")
don <- do.call(rbind, list(d1, d2, d3, d4))
#Membuat Plot
don %>%
  ggplot(aes(x=x, y=y)) +
  geom_point(color="#69b3a2", alpha = 0.8) +
  theme_ipsum() +
  facet_wrap(~name, scale="free")
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database

## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database

library(ggplot2)
library(scales)
data(Salaries, package="carData")
#Membuat Plot Sebaran
ggplot(Salaries,
       aes(x = yrs.since.phd,
           y = salary)) +
  geom_point(color="cornflowerblue",
             size = 2,
             alpha = .8) +
  scale_y_continuous(labels = scales::dollar,
                     limits = c(50000, 250000)) +
  scale_x_continuous(breaks = seq(0, 60, 10),
                     limits = c(0, 60)) +
  theme_minimal() +
  labs(x = "Years Since PhD",
       Y = "",
       title = "Experience and Salary",
       subtitle = "9-month salary for 2008-2009")

Plot Sebaran Menyesuaikan Garis

Berikut ini adalah bentuk visualisasi data dengan plot sebarang menyesuaikan garis:

library(ggplot2)
ggplot(Salaries,
       aes(x= yrs.since.phd,
           y= salary)) +
  geom_point(color="cornflowerblue") +
  geom_smooth(method = "lm", color = "brown1") +
  theme_minimal() +
  labs(x = "Years Since PhD",
       Y = "",
       title = "Experience and Salary",
       subtitle = "9-month salary for 2008-2009")
## `geom_smooth()` using formula 'y ~ x'

Plot sebaran menyesuaikan garis dengan garis kuadrat (satu lengkungan):

library(ggplot2)
ggplot(Salaries,
       aes(x= yrs.since.phd,
           y= salary)) +
  geom_point(color="cornflowerblue") +
  geom_smooth(method = "lm", 
              formula = y ~ poly(x,2),
              color = "yellow") +
  theme_minimal() +
  labs(x = "Years Since PhD",
       Y = "",
       title = "Experience and Salary",
       subtitle = "9-month salary for 2008-2009")

Penghalusan plot sebaran:

library(ggplot2)
ggplot(Salaries,
       aes(x = yrs.since.phd,
           y=salary)) +
  geom_point(color="cornflowerblue",
             size=2,
             alpha=1) +
  geom_smooth(size=1,
              color="green") +
  scale_y_continuous(label=scales::dollar,
                     limits=c(50000,250000)) +
  scale_x_continuous(breaks=seq(0,60,10),
                     limits=c(0,60)) +
  theme_minimal()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Kategorikal vs. Kontinu

Diagram Batang (Ringkasan Statistik)

Berikut ini adalah bentuk visualisasi data menggunakan diagram batang:

library(dplyr)
library(ggplot2)
library(scales)
data(Salaries, package="carData")
plotdata<-Salaries %>%
  group_by(rank) %>%
  dplyr::summarise(mean_salary = mean(salary))
mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(plotdata,
       aes(x=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                             "Full\nProfessor")),
           y=mean_salary)) +
  geom_bar(stat="identity",
           fill=mycols) +
  geom_text(aes(label=dollar(mean_salary)),
            vjust=-0.25) +
  scale_y_continuous(breaks=seq(0,130000,20000),
                     label=dollar) +
  theme_minimal() +
  labs(title = "Mean Salary by Rank",
       subtitle = "9-month academic salary for 2008-2009",
       x ="",
       y ="")

Plot Densitas Kernel yang Dikelompokan

Berikut ini adalah bentuk visualisasi data menggunakan pengelompokan plot densitas kernel:

ggplot(Salaries,
       aes(x=salary,
           fill=rank)) +
  geom_density(alpha=0.4) +
  theme_minimal() +
  labs(title="Salary Distribution by Rank")

Boxplot

Berikut ini adalah bentuk visualisasi data dengan boxplot:

mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(Salaries, aes(x=rank,
                     y=salary)) +
  geom_boxplot(notch = TRUE,
               fill = mycols,
               alpha = .7) +
  theme_minimal() +
  labs(title = "Salary Distribution by Rank II")

Plot Biola

Berikut ini merupakan bentuk visulisasi data menggunakan plot biola:

ggplot(Salaries,
       aes(x=rank,
           y=salary)) +
  geom_violin(fill="azure1") +
  geom_boxplot(width=.2,
               fill=mycols,
               outlier.color="red",
               outlier.size=2) +
  theme_minimal() +
  labs(title="Salary Distribution by Rank III")

Plot Garis Punggung

Berikut ini adalah bentuk visualisasi data menggunakan plot garis punggung:

library(dplyr)
library(ggplot2)
library(ggridges)
ggplot(mpg,
       aes(x=cty,
           y=class,
           fill=class)) +
  geom_density_ridges(alpha=0.7) +
  theme_ridges() +
  labs("Highway Mileage by Auto Class") +
  theme(legend.position="none")
## Picking joint bandwidth of 0.929

Plot Garis

Berikut ini adalah vidualisasi data menggunakan plot garis:

library(dplyr)
library(ggplot2)
library(ggridges)
plotdata <- Salaries %>%
  group_by(rank,sex) %>%
  dplyr::summarize(n=n(),
                   mean=mean(salary),
                   sd=sd(salary),
                   se=sd/sqrt(n),
                   ci=qt(0.975, df=n-1)*sd/sqrt(n))
## `summarise()` has grouped output by 'rank'. You can override using the `.groups` argument.
pd <- position_dodge(0.2)
ggplot(plotdata,
       aes(x=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                             "Full\nProfessor")),
           y=mean,
           group=sex,
           color=sex)) +
  geom_point(position=pd,
             size=3) +
  geom_line(position=pd,
            size=1) +
  geom_errorbar(aes(ymin=mean-se,
                    ymax=mean+se),
                width= .1,
                position = pd,
                size=1) +
  scale_y_continuous(label=scales::dollar) +
  scale_color_brewer(palette="Set1") +
  theme_minimal() +
  labs(title = "Mean Salary by Rank and Sex",
       subtitle="(mean +/- standard error)",
       x="",
       y="",
       color="Gender")

Plot Strip

Berikut ini adalah bentuk visualisasi data menggunakan plot strip:

library(ggplot2)
library(scales)
ggplot(Salaries,
       aes(y=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                       "Full\nProfessor")),
           x=salary,
           color=rank)) +
  geom_jitter(alpha=0.7,
              size=1.5) +
  scale_x_continuous(label=dollar) +
  labs(title="Academic Salary by Rank",
       subtitle="9-month salary for 2008-2009",
       x="",
       y="") +
  theme_minimal() +
  theme(legend.position="none")

Gabungan Jitter dan Plot Kotak

Berikut ini adalah bentuk visualisasi data menggunakan gabungan jitter dan plot kotak:

library(ggplot2)
library(scales)
ggplot(Salaries,
       aes(x=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                       "Full\nProfessor")),
           y=salary,
           color=rank)) +
  geom_boxplot(size=1,
               outlier.shape=1,
               outlier.color="black",
               outlier.size=3) +
  geom_jitter(alpha=0.5,
              width=.2) +
  scale_y_continuous(label=dollar) +
  labs(title="Academic Salary by Rank",
       subtitle="9-month salary for 2008-2009",
       x="",
       y="") +
  theme_minimal() +
  theme(legend.position ="none") +
  coord_flip()

Visualisasi data dengan plot kotak hibrida-setengah plot kotak, setengah plot sebaran:

library(ggplot2)
library(scales)
library(ggpol)
## Warning: package 'ggpol' was built under R version 4.1.2
ggplot(Salaries,
       aes(x=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                       "Full\nProfessor")),
           y=salary,
           fill=rank)) +
  geom_boxjitter(color="black",
                 jitter.color="darkgrey",
                 errorbar.draw=TRUE) +
  scale_y_continuous(label=dollar) +
  labs(title="Academic Salary by Rank",
       subtitle="9-month salary for 2008-2009",
       x="",
       y="") +
  theme_minimal() +
  theme(legend.position = "none")

Plot Kawanan Lebah

Berikut ini adalah visualisasi data menggunakan plot kawanan lebah:

library(ggplot2)
library(scales)
library(ggbeeswarm)
## Warning: package 'ggbeeswarm' was built under R version 4.1.2
ggplot(Salaries,
       aes(x=factor(rank,
                    labels=c("Assistant\nProfessor",
                             "Associate\nProfessor",
                       "Full\nProfessor")),
           y=salary,
           color=rank)) +
  geom_quasirandom(alpha=0.7,
                   size=1.5) +
  scale_y_continuous(label=dollar) +
  labs(title="Academic Salary by Rank",
       subtitle="9-month salary for 2008-2009",
       x="",
       y="") +
  theme_minimal() +
  theme(legend.position = "none")

Diagram Titik Cleveland

Berikut ini adalah visualisasi data menggunakan diagram titik cleveland:

library(dplyr)
library(ggplot2)
library(scales)
library(ggbeeswarm)
library(gapminder)
## Warning: package 'gapminder' was built under R version 4.1.2
data(gapminder, package="gapminder")                 

library(dplyr)
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)

ggplot(plotdata, 
       aes(x=lifeExp, 
           y=reorder(country, lifeExp))) +
  geom_point(color="blue", 
             size = 2) +
  geom_segment(aes(x = 40, 
               xend = lifeExp, 
               y = reorder(country, lifeExp), 
               yend = reorder(country, lifeExp)),
               color = "azure3") +
  labs (x = "Life Expectancy (years)",
        y = "",
        title = "Life Expectancy by Country",
        subtitle = "GapMinder data for Asia - 2007") +
  theme_minimal() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

Data Multivariat

Pengelompokan

1

library(carData)
library(ggplot2)
data(Salaries, package="carData")
ggplot(Salaries, aes(x=yrs.since.phd,
                     y=salary,
                     color=rank)) +
  geom_point() +
  theme_minimal() +
  labs(title = "Academic salary by Rank and Years Since Degree")

2

library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=yrs.since.phd,
                     y=salary,
                     color=rank,
                     shape=sex)) +
  geom_point(size=3,
             alpha=.6) +
  theme_minimal() +
  labs(title = "Academic salary by Rank and Years Since Degree")

3

library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=yrs.since.phd,
                     y=salary,
                     color=rank,
                     size=yrs.service)) +
  geom_point(alpha=.8) +
  theme_minimal() +
  labs(title = "Academic salary by Rank and Years Since Degree")

4

library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=yrs.since.phd,
                     y=salary,
                     color=sex)) +
  geom_point(alpha=.4,
             size=3) +
  geom_smooth(se=FALSE,
              method="lm",
              formula = y~poly(x,2),
              size=1.5) +
  theme_minimal() +
  labs(x="Years Since Ph.D.",
       title = "Academic salary by Sex and Years Experience",
       y="",
       color="Sex") +
  scale_y_continuous(label=scales::dollar) +
  scale_color_brewer(palette="Set1")

Pembagian Faset (Faceting)

1

library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=salary)) +
  geom_histogram(fill="cornflowerblue",
                 color="white") +
  facet_wrap(~rank, ncol=1) +
  theme_minimal() +
  labs(title="Salary Histograms by Rank")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

2

library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=salary/1000)) +
  geom_histogram(fill="cornflowerblue",
                 color="white") +
  facet_grid(sex~rank) +
  theme_minimal() +
  labs(title="Salary Histograms by Rank and Sex",
       x="Salary ($1000)")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3

library(carData)
library(ggplot2)
library(dplyr)

plotdata <- Salaries %>%
  group_by(sex,rank,discipline) %>%
  dplyr::summarize(n=n(),
                   mean=mean(salary),
                   sd=sd(salary),
                   se=sd/sqrt(n))
## `summarise()` has grouped output by 'sex', 'rank'. You can override using the `.groups` argument.
plotdata$discipline <- factor(plotdata$discipline,
                              labels=c("Theoretical",
                                       "Applied"))

ggplot(plotdata,
       aes(x=sex,
           y=mean,
           color=sex)) +
  geom_point(size=3) +
  geom_errorbar(aes(ymin=mean-se,
                    ymax=mean+se),
                width=.1) +
  scale_y_continuous(breaks = seq(70000,140000,10000),
                     label=scales::dollar) +
  facet_grid(.~rank+discipline) +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.y = element_blank()) +
  labs(x="",
       y="",
       title = "Nine Month Academic Salaries by Gender, Discipline, and Rank",
       subtitle="(Means and Standard Errors)") +
  scale_color_brewer(palette="Set1")

4

library(gapminder)
library(ggplot2)
library(dplyr)
#memplot harapan hidup berdasarkan tahun secara terpisah
#untuk setiap negara di Asia
data(gapminder, package="gapminder")
#pilih data Asia
plotdata<- dplyr::filter(gapminder,
                         continent =="Asia")
#memplot harapan hidup
ggplot(plotdata,
       aes(x=year,
           y=lifeExp)) +
  geom_line(color="grey") +
  geom_point(color="blue") +
  facet_wrap(~country) +
  theme_minimal(base_size=9) +
  theme(axis.text.x=element_text(angle=45,
                                 hjust=1)) +
  labs(title="Changes in Life Expectancy",
       x="Year",
       y="Life Expectancy")