Algoritma & Struktur Data

~ Tugas 06 ~


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/saram.05/
RPubs https://rpubs.com/sausanramadhani/

Visualisasi data adalah tampilan berupa grafik atau visual dari informasi dan data. Visualisasi data mengubah kumpulan data menjadi hal lebih sederhana untuk ditampilkan. Dengan demikian, pembaca akan lebih mudah memahami tren, outliers, dan pola dalam suatu data.

Pemrograman R memungkinkan kita dalam mempelajari visualisasi data dengan menawarkan seperangkat fungsi dan library untuk membangun visualisasi dan menyajikan data. Tentunya memiliki berbagai ragam visualisasi. Namun, kali ini lebih terfokus pada 3 teknik visualisasi data yaitu univariat, bivariat, dan multivariat.

Univariat (Satu Variabel)

Visualisasi data univariat merupakan visualisasi data yang dilakukan untuk melakukan distribusi data dari satu variabel. Variabel tersebut terbagi menjadi 2, yaitu :
Kategoris misalnya jenis kelamin, ras, negara, kota, dan sebagainya.
Numerik misalnya usia, berat badan, inflasi, suku bunga, dan sebagainya.

Variabel Kategori

Secara umum variabel kategoris bukanlah variabel kuantitatif yang berwujud angka. Biasanya visualisasinya menggunakan diagram batang, diagram lingkaran (diagram pai), dan yang jarang diguanakan yaitu diagram pohon (peta pohon). Berikut penjelasan mengenai cara menghasilkan bentuk diagram tersebut.

Diagram Batang

Pertama yaitu diagram batang, dibawah ini merupakan frekuensi dari dataset marriage yang didapat dari package mosaicData. Contoh kode diagram batang dibawah ini menampilkan distribusi peserta pernikahan berdasarkan Zodiak. Simak langkahnya sebagai berikut :

library(ggplot2)                                                 # untuk visualisasi
#setwd("C:/Users/Sausan/Dekstop/")                               # atur working directorynya
Marriage <- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv")
ggplot(Marriage, aes(x = zodiacs)) +                             # memplot distribusi dari 'Zodiacs'
  geom_bar(fill = "cornflowerblue",
           color = "azure4") +                                   # dapat mengganti warna
  theme_minimal() +                                              # menggunakan tema minimal
  labs(x = "Zodiacs",                                            # dapat mengganti label dan judul plot
       y = "Frequency",
       title = "Marriage Participants by Zodiacs")

Batang pada diagram batang menampilkan persentase dari jumlah. Diagram batang pada contoh kode diatas menggunakan kode aes(x=sign) untuk mempersingkat aes(x=sign, y= ..count..), yang mana ..count.. ialah variabel khusus yang menampilkan frekuensi dari setiap kategori. Cara ini bisa digunakan saat ingin menghitung persentase dengan variabel secara eksplisit.

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

Pada pemrograman R, warna bisa ditentukan dengan nama (contohnya col="red") atau bisa juga menggunakan triple RGB heksadesimal (contohnya col="#FFCC00"). Cara lain yaitu memakai sistem warna lain misalnya kita ambil dari package RColorBrewer.

Untuk mempermudah dalam pembuatan diagram batang maka kita urutkan batang berdasarkan frekuensinya. Berdasarkan kode di bawah ini, frekuensi dihitung secara eksplisit. Fungsi reorder berfungsi untuk mengurutkan kategori berdasarkan frekuensinya. stat="identity" memberitahu fungsi plot agar tidak menghitung jumlah karena frekuensinya diberikan secara langsung.

library(dplyr)
library(ggplot2)
plotdata <- Marriage %>%
  count(zodiacs)
# menyusun plot batang secara meningkat
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 Categories")

Berikut ini ialah kode untuk memberi label pada setiap barang berdasarkan nilai numeriknya :

library(dplyr)
library(ggplot2)
library(scales)
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n/sum(n),
         pctlabel = paste0(round(pct*100), "%"))
# plot batang sebagai persentase, dalam urutan menurun dengan label batang
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 = "Labeling Bars")

Untuk mengatasi tumpang tindihnya label kategori maka kita bisa memutar label sumbu seperti kode berikut ini :

library(ggplot2)
library(scales)
# memplot batang sebagai persentase, dalam urutan menurun dengan label batang
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 = "Overlapping Labels") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Untuk mengatasi hal tersebut, bisa juga menggunakan cara membalik sumbu x dan y seperti pada kode berikut ini :

library(ggplot2)
library(scales)
# memplot batang sebagai persentase, dalam urutan menurun dengan label batang
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) +
  scale_y_continuous(labels = percent) +
  theme_minimal()+
  labs(x = "Zodiacs",
       y = "Percent",
       title = "Overlapping Labels")+
  coord_flip()

Diagram Pai

Diagram pai pada dasarnya tidak direkomendasi untuk digunakan dalam Visualisasi data. Diagram pai tidak dapat digunakan untuk membandingkan lebih dari satu buah Distribusi, sehingga penulis lebih menyarankan penggunaan diagram batang untuk melihat Distribusi variabel kategori. Diagram pai cocok digunakan apabila ingin membandingkan setiap kategori secara keseluruhan dan jumlah kategorinya kecil. Berikut ialah kode untuk membuat diagram pai sederhana dengan ggplot2 :

library(dplyr)
library(ggplot2)
library(scales)

# Persiapan Data
plotdata <- Marriage %>%
   count(race) %>% 
   arrange(desc(race)) %>%
   mutate(prop = round(n*100/sum(n), 1), 
          lab.ypos = cumsum(prop) - 0.5*prop)

# Membuat Diagram Pai
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 Participants by Race")

Diagram donat ialah bentuk sederhana dari diagram pai dan terdapat lubang di dalamnya. Perbedaan kodenya yaitu menggunakan x=2 dan xlim = c(0.5, 2.5) supaya membentuk lubang di dalam diagram pai. Argumen width dalam fungsi geom_bar() tidak lagi diperlukan.

library(ggplot2)
library(scales)

# Membuat Diagram Donat
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 participants by Race")

Berikut kode untuk menambahkan label dan menghapus legend :

library(ggplot2)             # Untuk visualisasi
library(scales)              # Untuk menentukan jeda atau label secara otomatis

# Tambahkan Label Persen
plotdata$percent <- paste0(plotdata$race, "\n", 
                     round(plotdata$prop), "%")

# Membuat Diagram Donat dalam Persen
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 participants by Race")

Peta Pohon

Alternatif dari diagram pai yaitu peta pohon. Perbedaannya yaitu peta pohon bisa menangani variabel kategorikal yang mempunyai banyak tingkatan.

library(ggplot2)
library(treemapify)
library(scales)
plotdata <- Marriage %>%
   count(officialTitle)
ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n)) +
   geom_treemap() + 
   labs(title = "Marriage Participants by Officiate")

Kode lainnya yaitu menggunakan label sebagai berikut :

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

Variabel Kontinu

Secara umum variabel kontinu merupakan variabel kuantitatif yang berwujud angka. Biasanya visualisasinya menggunakan histogram, plot densitas kernel, atau juga plot titik.

Histogram

Berikut ini contoh kode plot usia dari peserta pernikahan dengan menggunakan dataset Marriage :

library(ggplot2)                 # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
   geom_histogram(fill = "cornflowerblue", 
                  color = "white", bins = 20) + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Marriage Participants by Age (Basic)", 
        x = "Age")

Dari diagram tersebut diketahui bahwa data terbesar ada pada usia sekitar 20 tahun setelah itu ada pada usia sekitar 40 tahun lalu data terkecil ada pada usia sekitar 60 dan 70 tahun. Dengan demikian bisa menjadi distribusi multimodal dan warna histogram bisa diubah menggunakan dua cara, yaitu :
• fill, warna isi untuk batang
• color, warna batas di sekitar batang

Bisa juga menggunakan binwidth yang mana lebar nampan diwakilkan oleh batang seperti berikut ini :

library(ggplot2)                 # Untuk visualisasi
library(scales)                  # Untuk menentukan jeda atau label secara otomatis
ggplot(Marriage, 
       aes(x = age, 
           y = ..count.. / sum(..count..))) +
   geom_histogram(fill = "cornflowerblue", 
                  color = "white", 
                  binwidth = 5) + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Marriage Participants by Age (Alternative)", 
        y = "Percent", 
        x = "Age") + 
   scale_y_continuous(labels = percent)

Sama halnya dengan diagram batang, sumbu y bisa mewakilkan jumlah atau persen dari total seperti berikut ini :

library(ggplot2)                 # Untuk visualisasi
library(scales)                  # Untuk menentukan jeda atau label secara otomatis
ggplot(Marriage, 
       aes(x = age, 
           y = ..count.. / sum(..count..))) +
   geom_histogram(fill = "cornflowerblue", 
                  color = "white", 
                  binwidth = 5) + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Marriage Participants by Age (Percent)", 
        y = "Percent", 
        x = "Age") + 
   scale_y_continuous(labels = percent)

Plot Densitas Kernel

Plot densitas kernel merupakan alternatif dari histogram dan termasuk metode non-parametrik yang berfungsi untuk memperkirakan fungsi densitas probabilitas dari variabel acak kontinu. Berikut ialah kode yang menampilkan perhalusan dari histogram yang mana area bawah kurvanya adalah satu.

library(ggplot2)                 # Untuk visualisasi
ggplot(Marriage, aes(x = age)) + 
   geom_density(fill = "indianred3") + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Marriage Participants by Age")

Berdasarkan tampilan tersebut dapat terlihat distribusi dari nilai misalnya perbandingan kasus antara 20 dan 40 tahun diwakilkan area bawah kurva antara 20 dan 40 di sumbu x. Untuk menentukan warna isian dan batasannya menggunakan fill dan color seperti cara sebelumnya.

Parameter Penghalusan (Smoothing)

Untuk mengatur tingkat kehalusan bisa menggunakan parameter bandwidth bw, sedangkan fungsi bw.nrd0 berfungsi untuk menemukan nilai default atas variabel tertentu. Nilai terkecil menghasilkan penghalusan lebih sedikit, sebaliknya nilai tersebar menghasilkan penghalusan lebih banyak. Simak kode berikut ini ;

library(ggplot2)                 # Untuk visualisasi
bw.nrd0(Marriage$age)            # Default bandwidth untuk variabel usia 
## [1] 5.181946
ggplot(Marriage, aes(x = age)) + 
   geom_density(fill = "deepskyblue", 
                bw = 1) + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Participants by Age", 
        subtitle = "bandwidth = 1")

Dengan menggunakan cara seperti ini bisa mempermudah melihat skor mana yang sering dan mana yang jarang.

Diagram Titik

Diagram titik juga termasuk alternatif dari histogram. Diagram titik adalah suatu gambaran untuk memperlihat atau menerangkan suatu data yang akan disajikan menggunakan titik-titik serta berjalan dengan baik apabila jumlah pengamatannya kecil. Opsi ntuk menentukan warna isian dan batasan masing-masing titik masih sama yaitu menggunakan fill dan color.

library(ggplot2)                 # Untuk visualisasi
ggplot(Marriage, aes(x = age)) + 
   geom_dotplot(fill = "gold", 
                color = "azure4", 
                binwidth = 2) + 
   theme_minimal() +             # Menggunakan tema minimal
   labs(title = "Participants by Age", 
        y = "Proportion", 
        x = "Age")

Data Bivariat

Analisis bivariat adalah analisis data yang dilakukan untuk mencari korelasi atau pengaruh antara 2 varibel atau lebih yang diteliti. Jenis grafik tergantung pada tingkat pengukuran dari variabel (kategorikan atau kuantitatif).

Kategorikal vs. Kategorikal

Diagram Batang Bertumpuk

Berikut ialah kode bentuk dataset Full economy yang mana menghubungkan kelas mobil dan jenis penggerak (roda depan, roda belakang, atau juga penggerak 4 roda) untuk mobil :

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

Diagram Batang yang Dikelompokkan

Tempat diagram batang yang dikelompokkan untuk variabel kategori kedua secara berdampingan. position = "single" untuk membuat plot batang yang dikelompokkan dan biasanya hanya ada di versi pengembangan terbaru ggplot2.

library(ggplot2)                                     # untuk visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
  theme_minimal() +                                  # menggunakan tema minimal
  geom_bar(position = position_dodge(preserve = "single"))

Diagram Batang Tersegmentasi

Plot batang yang tersegmentasi ialah plot batang bertumpuk yang mana tiap batang mewakilkan 100 persen dengan menggunakan position = "filled". Plot ini cocok digunakan saat ingin membandingkan persentasi dari kategori dalam satu variabel di setiap tingkat variabel lain. Misalnya seperti kode di bawah ini yang berisikan proporsi mobil dengan penggerak roda depan (front-wheel) meningkat saat Anda memindahkan dari mobil penumpang yang kecil, ke menengah, ke minivan.

library(dplyr)                                       # untuk manipulasi data 
library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# membuat ringkasan dataset (manipulasi data)
plotdata <- mpg %>%
  group_by(class, drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
# membuat diagram batang tersegmentasi
# menambahkan label untuk setiap segmen
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() +                                  # menggunakan tema minimal
  labs(y = "Percent",
       fill = "Drive Train",
       x = "Class",
       title = "Automobile Drive by Class") +
  theme_minimal()

Untuk meningkatkan warna dan pelabelan bisa menggunakan beberapa opsi berikut ini :
factor, mengubah urutan dari kategori untuk variabel kelas dan urutan serta labels, untuk variabel drive.
scale_y_continuous, mengubah label tanda centang sumbu y.
labs, menyediakan judul dan mengubah label untuk sumbu x dan y dan juga legend.
scale_fill_brewer, mengubah skema warna isian.
theme_minimal, menghapus latar belakang abu-abu dan mengubah warna kisi.

Plot Mosaik

Diagram mosaik dapat menampilkan hubungan antara variabel kategorikal menggunakan persegi panjang yang luasnya mewakili proporsi kejadian untuk kombinasi level tertentu. Warna ubin juga dapat menunjukkan tingkat hubungan antar variabel.

Meskipun plot mosaik dapat dibuat dengan ggplot2 menggunakan package ggmosaic, saya merekomendasikan menggunakan package vcd sebagai gantinya. Meskipun tidak akan membuat grafik ggplot2, package tersebut memberikan pendekatan yang lebih komprehensif untuk memvisualisasikan data kategorikal.

Orang-orang terpesona dengan Titanic (atau terpesona dengan Leo?). Dalam bencana Titanic, peran apa yang dimainkan oleh sex dan class dalam survival? Kita dapat memvisualisasikan hubungan antara ketiga variabel kategorikal menggunakan kode berikut.

# membuat tabel
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
# membuat plot mosaik dari tabel
library(vcd)
mosaic(tbl, main = "Titanic data")

Ukuran ubin sebanding dengan persentase kasus dalam kombinasi tingkat tersebut. Jelas lebih banyak penumpang yang tewas daripada yang selamat. Mereka yang tewas adalah penumpang laki-laki kelas 3 dan kru laki-laki (kelompok yang terbesar).

Jika kita mengasumsikan bahwa ketiga variabel ini tidak bergantung, kita dapat memeriksa residual dari model dan memberi bayangan pada ubin agar sesuai. Pada grafik di bawah, biru gelap mewakilkan lebih banyak kasus dari yang diharapkan tidak terikat. Merah tua mewakili lebih sedikit kasus dari yang diharapkan jika berlaku tidak terikat

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")

Kita dapat melihat jika class, gender, dan survival adalah tidak terikat, kita melihat lebih banyak kru laki-laki yang tewas, dan peremupan kelas 1, 2, dan 3 bertahan hidup daripada yang diharapkan. Sebaliknya, jauh lebih sedikit penumpang kelas 1 (laki-laki dan perempuan) yang meniggal daripada yang diperkirakan secara kebetulan. Dengan demikian asumsi tidak terikat ditolak.

Kontinu vs. Kontinu

Hubungan antara dua variabel kuantitatif biasanya ditampilkan menggunakan plot sebaran dan grafik garis.

Plot Sebaran

Plot Sebaran dibuat untuk mempelajari hubungan antara 2 variabel. Sehingga sering disertai dengan perhitungan koefisien korelasi, yang biasanya mencoba untuk mengukur hubungan linear. Namun jenis hubungan lain dapat dideteksi menggunakan plot sebaran, dan tugas umum terdiri dari menyesuaikan model yang menjelaskan Y dalam fungsi X. Berikut adalah beberapa pola yang dapat Anda deteksi dengan melakukan plot sebaran.

library(ggplot2)                                   # visualisasi data
library(hrbrthemes)                                # untuk tema `theme_ipsum()` dan legend
# 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))
# Plot
don %>%
  ggplot(aes(x=x, y=y)) +
    geom_point(color="#69b3a2", alpha=0.8) +
    theme_ipsum() +
    facet_wrap(~name, scale="free")

Tampilan yang paling sederhana dari 2 variabel kuantitatif adalah plot sebaran, dengan setiap variabel diwakilkan oleh sumbu. Contohnya, menggunakan dataset Salaries, kita dapat memplot pengalaman (yrs.since.phd) vs. gaji akademik (salary) dari Profesor perguruan tinggi.

library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
data(Salaries, package="carData")
# plot sebaran yang ditingkatkan
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color="cornflowerblue", 
             size = 2, 
             alpha=.8) +
  scale_y_continuous(label = scales::dollar, 
                     limits = c(50000, 250000)) +
  scale_x_continuous(breaks = seq(0, 60, 10), 
                     limits=c(0, 60)) +
  theme_minimal() +                                  # menggunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")

Catatan: opsi geom_point dapat digunakan untuk mengubah
color - warna titik
size - ukuran titik
shape - bentuk titik
alpha - transparansi titik. Kisaran transparansi dari 0 (transparan) hingga 1 (buram), dan merupakan parameter yang berguna saat beberapa titik mengalami tumpang tindih.

Fungsi scale_x_continuous dan scale_y_continuous mengontrol penskalaan pada sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat plot sebaran yang lebih menarik.

Plot Sebaran Menyesuaikan Garis

Seringkali berguna untuk meringkas hubungan yang ditampilkan dalam plot sebaran, dengan menggunakan sebuah garis yang menyesuaikan. Banyak jenis garis yang didukung, termasuk linear, polinomial, dan nonparametrik (loess). Secara default, garis-garis ini ditamplikan dengan batas kepercayaan 95%.

library(ggplot2)                                     # untuk visualisasi
ggplot(Salaries,
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "cornflowerblue") +
  geom_smooth(method = "lm", color = "brown1")+
  theme_minimal() +                                  # menggunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")

Jelas bahwa gaji akan meningkat sesuai dengan pengalaman. Namun, tampaknya ada penurunan diujung kanan - profesor dengan pengalaman signifikan, mendapatkan gaji lebih rendah. Garis lurus tidak dapat merangkap efek non-linear ini. Garis dengan lengkungan akan lebih pas di sini.

library(ggplot2)                                     # untuk visualisasi
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() +                                  # menggunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")

Akhirnya, garis kesesuaian nonparametrik yang diperhalus sering kali dapat memberikan gambaran yang baik tentang hubungan tersebut. Default di ggplot2 adalah garis loess yang berarti penghalusan plot sebaran yang tertimbang secara lokal.

library(ggplot2)                                     # untuk visualisasi
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() +                                  # menggunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009") +
  theme_minimal()

Kategorikal vs. Kontinu

Ketika memplot hubungan antara variabel kategorikal dan variabel kuantitatif, tersedia banyak jenis grafik. ini termasuk diagram batang yang menggunakan ringkasan statistik, plot densitas kernel yang dikelompokkan, plot kotak berdampingan, plot biola berdampingan, plot mean/sem, plot garis punggungan, dan plot Cleveland.

Diagram Batang (Ringkasan Statistik)

Di bagian sebelumnya, diagram batang digunakan untuk menampilkan jumlah kejadian berdasarkan kategori untuk variabel tunggal atau untuk dua variabel. Anda juga dapat menggunakan diagram batang untuk menampilkan ringkasan statistik lainnya (seperti mean atau median) pada variabel kuantitatif untuk setiap tingkatan dari variabel kategorikal.

Sebagai contoh, grafik berikut ini menampilkan gaji rata-rata untuk sampel profesor universitas berdasarkan jabatan akademik mereka.

library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
data(Salaries, package="carData")
# menghitung gaji rata-rata untuk setiap jabatan
plotdata <- Salaries %>%
  group_by(rank) %>%
  dplyr::summarize(mean_salary = mean(salary))
# plot gaji rata-rata dengan cara yang lebih menarik
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() +                                  # menggunakan tema minimal
  labs(title = "Mean Salary by Rank", 
       subtitle = "9-month academic salary for 2008-2009",
       x = "",
       y = "")

Plot Densitas Kernel yang Dikelompokkan

Seseorang dapat membandingkan kelompok pada variabel numerik dengan melapiskan plot densitas kernel dalam satu grafik. Mari kita plot distribusi gaji berdasarkan jabatan menggunakan plot densitas kernel.

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

Opsi ‘alpha’ membuat plot densitas menjadi sebagian transparan sehingga kita dapat melihat apa yang terjadi di bagian yang tumpang tindih. Nilai alpha berkisar dari 0 (transparan) hingga 1 (buram). Grafik tersebut menjelaskan bahwa, secara umum, gaji akan meningkat sesuai jabatan. Namun, kisaran gaji untuk full profesor sangat luas.

Boxplot

Plot kotak berdampingan (boxplot) berfungsi untuk membandingkan kelompok pada variabel numerik sesuai dengan tingkatan variabel kategorinya. Di bawah ini terdapat kode mengenai plot distribusi gaji sesuai jabatan dengan menggunakan boxplot yang terdapat metode perkiraan untuk visualisasi apakah kelompok berbeda. Jika kedua boxplot tidak tumpang tindih maka bisa dibilang terbukti kuat 95% yaitu median kedua kelompok tidak sama.

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")

Boxplot memiliki keunggulan yaitu lebarnya tidak berarti sehingga kita bisa membandingkan distribusi dari banyak kelompok dalam satu grafik.

Plot Biola

Plot biola sama seperti plot densitas kernel hanya saja kali ini dicerminkan juga diputar 90 derajat. Berikut ini kode mengenai plot distribusi gaji sesuai jabatan dengan 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")

Plot Garis Punggung

Plot kegembiraan atau plot garis punggung menggambarkan distribusi variabel kuantitatif beberapa kelompok. Plot ini sama seperti plot densitas kernel dari segi vertikal hanya saja membutuhkan sedikit ruang. Plot ini menggunakan package ggridges. Berikut ini kode mengenai plot perjalanan kota per galon berdasarkan kelas mobil dengan menggunakan data set Fuel economy.

library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visulisasi
library(ggridges)                                    # untuk mengendalikan visualisasi yang tumpang tindih
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")

Berdasarkan hasil kode di atas, yang memiliki jarak tempuh paling rendah ialah truk pikap sedangkan mobil subkompak dan kompak bisa mencapai peringkat tetapi mobil-mobil kecil ini memiliki rentang skor jarak tempuh yang luas. Pada grafik mobil kompak memungkinkan adanya tumpang tindih distribusi dan jika sudah parah bisa tambahkan transparansi menggunakan geom_density_ridges(alpha = n).

Plot Garis

Diagram garis adalah diagram berisi plot yang menghubungkan titik-titik data dan menunjukkan kuantitas dari data-data tersebut. Terdapat metode yang sering digunakan jika ingin membandingkan kelompok pada variabel numerik yaitu plot rata-rata dengan batang kesalahan (deviasi standar, kesalahan standar dari rata-rata, atau interval kepercayaan). Berikut ini kode yang menerapkan metode tersebut untuk membandingkan gaji terhadap jabatan dan jenis kelamin.

library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visualisasi
library(ggridges)                                    # untuk menangani visualisasi yang tumpang tindih
# menghitung rata-rata, deviasi standar,
# kesalahan standar, dan 95% interval kepercayaan 
# berdasarkan jabatan
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))
# meningkatkan plot rata-rata kesalahan atau standar kesalahan
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

Rancangan petak berjalur (Plot Strip) ialah plot sebaran satu dimensi yang mana berisi hubungan antara variabel pengelompokan dan variabel numerik. Misalnya yaitu plot distribusi gaji berdasarkan jabatan menggunakan plot strip. Jika titik yang dihasilkan sangat banyak, maka memungkinkan sulit diinterpretasi. Menerapkan warna akan mempermudah dalam membandingkan kelompok.

library(ggplot2)                                     # untuk visulisasi
library(scales)                                      # penskalaan infrastruktur
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")

Jika legend tidak diperlukan maka bisa menggunakan legend.position = "none" untuk menyembunyikannya.

Menggabungkan Jitter dan Plot Kotak

Menggabungkan jitter dan plot kotak akan mempermudah kita dalam memvisualisasikan distribusi. Berikut ini beberapa opsi yang bisa ditambahkan dalam pembuatan plot tersebut :

• plot kotak :
° size = 1, membuat garis lebih tebal.
° outlier.color = "black", membuat pencilan dengan warna hitam.
° outlier.shape = 1, menentukan lingkaran untuk pencilan.
° outlier.size = 3, meningkatkan ukuran dari pencilan.

• jitter :
° alpha = 0.5, membuat titik-titik lebih transparan.
° width = .2, mengurangi jumlah jitter (.4 ialah default)

fungsi coord_flip digunakan untuk membalik sumbu x dan y lebih tepatnya grafik diputar pada sisinya.

library(ggplot2)                                     # untuk visulisasi
library(scales)                                      # penskalaan infrastruktur
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()

Plot geom_boxjitter dalam package ggpol digunakan untuk membuat plot kotak hibrida - setengah plot kotak, setengah plot sebaran.

library(ggplot2)                                     # untuk visulisasi
library(scales)                                      # penskalaan infrastruktur
library(ggpol)                                       # plot kotak hibrida - setengah plot sebaran
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

Plot sebaran biola (plot kawanan lebah) sama seperti plot sebaran jitter yang mana plot ini mengurangi tumpang tindih untuk menampilkan distribusi variabel kuantitatif dengan memplot titik-titik. Plot ini juga menampilkan densitas data tiap titik mirip dengan plot biola.

library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # penskalaan infrastruktur
library(ggbeeswarm)                                  # mengurangi tumpang tindih
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")

Kemungkinan karena menggunakan fungsi geom_quasirandom maka plot ini mudah dibaca daripada plot strip jitter sederhana.

Diagram Titik Cleveland

Diagram titik cleveland bisa digunakan saat ingin membandingkan statistik numerik untuk beberapa kelompok. Berikut ini kode menggunakan data set gapminder untuk membandingkan harapan hidup tahun 2007 di negara Asia.

library(dplyr)                                       # untuk manipulasi data
library(ggplot2)                                     # untuk visualisasi
library(scales)                                      # penskalaan infrastruktur
library(ggbeeswarm)                                  # mengurangi tumpang tindih
library(gapminder)                                   # untuk dataset `gapminder` 
data(gapminder, package="gapminder")                 # memuat dataset `gapminder` 
# subset negara-negara Asian tahun 2007
library(dplyr)
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)
# Plot Cleveland yang menarik
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())

Plot di atas sering disebut juga grafik lolipop. Angka harapan terendah ada pada negara Afghanistan, sedangkan tertinggi ada pada negara Jepang.

Data Multivariat

Grafik Multivariat menampilkan hubungan antara tiga variabel atau lebih. Ada dua metode umum untuk menampung variabel: pengelompokan dan faceting.

Pengelompokan

Dalam pengelompokan, nilai dari dua variabel pertama dipetakan ke sumbu x dan y. Kemudian variabel tambahan dipetakan ke karakteristik visual lainnya seperti warna, bentuk, ukuran, jenis garis, dan transparansi. Pengelompokan memungkinkan Anda untuk memplot data untuk beberapa grup dalam satu grafik. Dengan menggunakan data set Salaries, mari kita tampilkan hubungan antara yrs.since.phd dan salary.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
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")

Selanjutnya, tambahkan jenis kelamin profesor, menggunakan bentuk titik untuk menunjukkan jenis kelamin. Kita akan meningkatkan ukuran titik dan menambahkan transparansi untuk memperjelas titik individual.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
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, Sex, and Years since Degree")

Kita tidak dapat mengatakan bahwa ini adalah grafik yang bagus. Ini sangat sibuk, dan mungkin sulit untuk membedakan profesor pria dari wanita. Faceting (dijelaskan di bagian berikutnya) mungkin akan menjadi pendekatan yang lebih baik.

Perhatikan perbedaan antara menentukan nilai konstan (seperti size = 3) dan pemetaan variabel untuk karakteristik visual (contoh, color = rank). Pemetaan selalu ditempatkan di dalam fungsi aes, sedangkan penetapan nilai konstanta selalu muncul di luar fungsi aes.

Berikut adalah contoh yang lebih jelas. Kita akan membuat grafik hubungan antar tahun sejak Ph.D. dan gaji menggunakan ukuran dari titik untuk menunjukkan masa kerja. Ini disebut plot gelembung.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
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, Years of Service, and Years since Degree")

Jelas sekali ada hubungan positif yang kuat antara tahun-tahun sejak Ph.D. dan tahun layanan. Asisten Profesor ada dalam jangkauan 0-11 tahun sejak Ph.D. dan 0-10 tahun layanan. Orang-orang profesional yang jelas sangat berpengalaman tidak hanya berada di tingkat Asisten Profesor (mereka mungkin dipromosikan atau keluar dari Universitas). Kita tidak menemukan batasan waktu yang sama antara Associate dan Full Professors. Plot gelembung dijelaskan lebih mendalam di bab selanjutnya.

Sebagai contoh terakhir, mari kita lihat yrs.since.phd vs. salary dan tambahkan jenis kelamin menggunakan warna dan garis kuadrat yang paling cocok.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
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) +
   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") +
   theme_minimal()

Pembagian Faset (Faceting)

Pengelompokan memungkinkan Anda untuk memplot beberapa variabel dalam satu grafik, menggunakan karakteristik visual seperti, warna, bentuk, dan ukuran. Dalam pembagian faset, sebuah grafik terdiri dari beberapa plot-plot terpisah atau kelipatan kecil, satu untuk setiap tingkatan dari variabel ketiga, atau kombinasi variabel. Ini akan lebih mudah dipahami dengan sebuah contoh.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
ggplot(Salaries, aes(x = salary)) +
   geom_histogram(fill = "cornflowerblue", 
                  color = "white") +
   facet_wrap(~rank, ncol = 1) +
   theme_minimal() +
   labs(title = "Salary Histograms by Rank")

Fungsi facet_wrap membuat grafik terpisah untuk setiap tingkat jabaran. Opsi ncol mengatur jumlah kolom. Dalam contoh berikutnya akan menggunakan dua variabel untuk mendefinisikan faset. Di sini, fungsi menetapkan jenis kelamin ke baris dan jabatan ke kolom, membuat matriks enam plot dalam satu grafik.

library(carData)              # Untuk Dataset
library(ggplot2)              # Untuk Visualisasi
ggplot(Salaries, aes(x = salary / 1000)) +
   geom_histogram(color = "white", 
                  fill = "cornflowerblue") +
   facet_grid(sex ~ rank) +
   theme_minimal() +
   labs(title = "Salary Histograms by Sex and Rank", 
        x = "Salary ($1000)")

Kita juga dapat mengkombinasi pengelompokan dan pembagian faset. Mari kita gunakan Plot Mean/SE dan pembagian faset untuk membandingkan gaji-gaji dari profesor pria dan wanita, dalam jabatan dan disiplin ilmu. Kita akan menggunakan warna untuk membedakan jenis kelamin dan pembagian faset untuk membuat plot-plot jabatan berdasarkan kombinasi disiplin ilmu.

library(carData)           # Untuk Dataset
library(ggplot2)           # Untuk Visualisasi
library(dplyr)             # Manipulasi Data

# Menghitung rata-rata dan kesalahan standar berdasarkan
# Jenis kelamin, jabatan, dan disiplin ilmu 
plotdata <- Salaries %>%
   group_by(sex, rank, discipline) %>%
   dplyr::summarize(n = n(), 
                    mean = mean(salary), 
                    sd = sd(salary), 
                    se = sd/sqrt(n))

# membuat label yang lebih baik untuk disiplin ilmu
plotdata$discipline <- factor(plotdata$discipline, 
                              labels = c("Theoretical", 
                                         "Applied"))

# membuat plot 
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")

Pernyataan facet_grid(.~rank+dicipline) tidak menentukan variabel baris (.) serta kolom yang ditentukan oleh kombinasi jabatan dan disiplin ilmu.

Fungsi theme() ialah mengubah tema menjadi tema hitam dan putih serta menghilangkan garis grid vertikal dan garis grid horizontal minor. Fungsi scale_color_brewer() mengubah skema warna untuk titik dan batang-batang kesalahan.

Pada pandangan pertama, tampaknya mungkin ada perbedaan gender dalam gaji untuk Associate dan Full Professors di bidang teoritis. Saya mengatakan “mungkin” karena kita belum melakukan pengujian hipotesis formal apapun (dalam kasus ini adalah ANCOVA). Lihat bagian Penyesuaian untuk mempelajari lebih lanjut mengenai penyesuaian tampilan grafik.

Sebagai contoh terakhir, kita akan beralih ke dataset baru dan memplot perubahan dalam harapan hidup dari waktu ke waktu untuk negara-negara di “Asia”. Data tersebut berasal dari dataset gapminder dalam package gapminder. Setiap negara muncul dalam fasetnya sendiri. Fungsi tema digunakan untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran tulisan.

library(gapminder)   # untuk dataset
library(ggplot2)     # Untuk Visualisasi
library(dplyr)       # Manipulasi Data

# 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 berdasarkan tahun, untuk setiap negara
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")