Algoritma & Struktur Data

~ Tugas 7 ~


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/diasary_nm/
RPubs https://rpubs.com/diyasarya/

Visualisasi data adalah proses membuat representasi visual dari data. Visualisasi data merupakan alat yang ampuh untuk menjelajahi kumpulan data yang besar dan kompleks. Memvisualisasikan data membantu pengguna untuk memahami pola, tren, hubungan, dan outlier yang tersembunyi di dalam data yang besar dan kompleks.


R dan Python adalah salah satu software yang mampu membuat visualisasi data dengan jenis atau macam yang beragama. Pada pertemuan kali ini, visualisasi data yang dibahas adalah Univariat, Bivariat, dan Multivariat.


Univariat (Satu Variabel)

Jenis visualisasi yang paling sederhana adalah visualisasi variabel tunggal atau “univariat”. Dengan bantuan visualisasi univariat, kami dapat memahami setiap atribut kumpulan data kami secara independen. Visualisasi data Univariat ini biasa digunakan untuk visualisasi perhitungan statistik seperti mean, median, modus, dll. Univariat dibagi menjadi dua jenis:
Kualitatif (Kategorikal), seperti : Jenis Kelamin, Ras, Kota, Negara, dll.
Kuantitatif (Numerikal), seperti : Usia, Berat Badan, Inflasi, Suku Bunga, dll.


Variabel Kategori

Variabel ini biasanya berbentuk data non-angka, bentuk grafik biasanya menggunakan Diagram Batang(Bar Chart), Diagram Pie(Pie Chart) dan bentuk yang jarang digunakan yaitu Peta Pohon(Tree Map).

Diagram Batang

Diagram Batang merupakan grafik yang merepresentasikan data kategorikal dengan bentuk persegi panjang yang memiliki tinggi dan panjang berbanding lurus dengan nilai yang akan dipresentasikan. Dibawah ini adalah contoh diagram batang yang menunjukkan frekuensi dari dataset Marriage. Langkah pertama, kita harus menyiapkan data lalu kita harus memanggil packages mosaicData selanjutnya, kita tentukan apa yang ingin ditampilkan dari diagram tersebut misal Kita akan menggunakan diagram batang untuk menampilkan distribusi pernikahan berdasarkan Zodiak.

library(ggplot2)                                           # library untuk membuat grafik/visualisasi data
#setwd("C:/Users/diyas/OneDrive/Documents/Semester 1 Matana University/AlgoritmadanStrukturData/Tugas 7")  # untuk men-setting working directory
Marriage <- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv")    # Memuat data dari PC anda

ggplot(Marriage, aes(x = zodiacs)) +
  geom_bar(fill = "cornflowerblue", 
           color = "azure4") +
  theme_minimal() +                                        # menggunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Frequency", 
       title = "Marriage Participants by Zodiacs")


Batang pada diagram batang dapat menggambarkan persentase dari jumlah. Untuk diagram batang berdasarkan zodiak, kode aes(x=sign) adalah bentuk ringkas dariaes(x = sign, y =..count..), di mana ..count.. digunakan untuk menghitung jumlah frekuensi dari suatu variabel. Anda dapat menggunakan ini untuk menghitung persentase, dengan menentukan variabel y secara eksplisit.

library(ggplot2)                                      # untuk visualisasi data

ggplot(Marriage, 
   aes(x = zodiacs, 
       y = ..count.. / sum(..count..))) +
   geom_bar(fill = rainbow(12), color = "azure4") +
   theme_minimal() +                                  # menggunakan tema minimal
   labs(x = "Zodiacs", 
       y = "Frequency", 
       title = "Marriage Participants by Zodiacs") + 
   scale_y_continuous(labels = scales::percent)       # untuk men-setting sumbu y dengan menambahkan simbol %


Catatan: Dalam R, warna bisa kita tentukan dengan memanggil nama (misalnya col= "red" ) atau dengan triplet RGB heksadesimal (seperti col = "#FFCC00" ). Kita juga dapat memanggil warna lain nya seperti salah satunya diambil dari package RColorBrewer.
Untuk mengurutkan batang berdasarkan nilai frekuensinya bisa menggunakan fungsi reorder untuk mengurutkannya dan fungsi stat="identity" agar tidak otomatis menghitung jumlah frekuensi.

library(dplyr)                                             # untuk manipulasi data
library(ggplot2)                                           # untuk visualisasi data
plotdata <- Marriage %>%                                   # memuat dataset
  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() +                                       # menggunakan tema minimal
   labs(x = "Zodiacs", 
        y = "Frequency", 
   title = "Sorting Categories")


Mari kita berikan label setiap batang dengan nilai numerik nya, dengan mengikuti kode di bawah ini :

library(dplyr)                                # untuk manipulasi data
library(ggplot2)                              # untuk visualisasi data
library(scales)                               # menentukan jeda atau label secara otomatis
plotdata <- Marriage %>%                      # memuat dataset
  count(zodiacs) %>%
  mutate(pct = n / sum (n), 
         pctlabel = paste0(round(pct*100), "%"))

# plot batang sebagai presentase, 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() +                          # menggunakan tema minimal
   scale_y_continuous(labels = percent) +     # menambahkan simbol % pada sumbu y
   labs(x = "Zodiacs", 
        y = "Frequency", 
        title = "Labeling Bars")


Untuk menghindari terjadinya label yang saling tumpang tindih, bisa menggunakan kode dibawah ini agar label sumbu x miring/tidak menumpuk.

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

# memplot batang sebagai presentase, 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) +     # menambahkan simbol % pada sumbu y
   theme_minimal() +                          # menggunakan tema minimal
   labs(x = "Zodiacs", 
        y = "Frequency", 
        title = "Overlapping Labels") + 
   theme(axis.text.x = element_text(angle = 45, hjust = 1))


Atau dengan cara yang berbeda bisa kita atur dari sumbu x horizontal menjadi vertikal dan begitupun sumbu y.

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

# memplot batang sebagai presentase, 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) +     # menambahkan simbol % pada sumbu y
   theme_minimal() +                          # menggunakan tema minimal
   labs(x = "Zodiacs", 
        y = "Frequency", 
        title = "Overlapping Labels") +
   coord_flip()


Diagram Pie

Diagram Pie merupakan grafik statistika berbentuk lingkaran yang dibagi menjadi beberapa potongan untuk mengilustrasikan proporsi suatu nilai. Diagram ini bersifat kontroversial karena orang-orang lebih mudah membaca data berbentuk panjang batang dari pada data berbentuk lingkaran. Jadi, saya menyarankan untuk menggunakan diagram batang untuk membandingkan suatu data daripada diagram pie. Lagi pula, membuat diagram pie akan lebih susah dan lebih banyak kode dibandingkan diagram batang.
Dibawah ini adalah contoh untuk membuat diagram pai sederhana dengan menggunakan library ggplot2:

library(dplyr)                                # untuk manipulasi data                             
library(ggplot2)                              # untuk visualisasi data
library(scales)                               # menentukan jeda atau label secara otomatis

# 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 termasuk bagian Diagram Pai dengan bentuk yang sederhana dengan lubang di tengahnya. Perbedaan antara kode diagram pai adalah dengan menetapkan : x = 2 dan xlim = c(0.5, 2.5) untuk membuat lubang di tengah diagram pai. Argumen widht dalam fungsi geom_bar tidak diperlukan dalam membuat diagram donat.

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

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


Sekarang mari kita kreasikan diagram pie ini dengan menambahkan label, sambil 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

Jenis visualisasi data ini mampu menangani variabel kategorikal yang mempunyai banyak tingkatan. Peta Pohon bisa dijadikan cara lain dari diagram pie untuk membuat visualisasi data.

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


Agar Peta pohon lebih mudah dibaca dibawah ini adalah kode untuk menambahkan label pada peta pohon.

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

Bentuk variabel kuantitatif (kontinu), maka bentuk grafik yang bisa digunakan adalah Histogram, Density plot, Diagram Titik.

Histogram

Histogram digunakan untuk plotting data numerik yang mana akan menganalisa nilai frekuensi yang dimiliki oleh data. Dengan menggunakan dataset Marriage, kita bisa plot data yang ingin kita tampilkan pada histogram ini misal, kita akan menampilkan usia peserta pernikahan.

library(ggplot2)                 # Untuk visualisasi data
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")


Untuk memudahkan orang dalam melihat histogram kita bisa memfokuskan lagi pada beberapa kategori variabel seperti memberikan warna pada usia 20-an tahun, 40-an tahun, 60-an tahun dan 70-an tahun.Hal seperti itu bisa kita lakukan dengan pemberian warna yang berbeda pada masing-masing jenjang usia, dengan format dibawah ini:
• fill = untuk mewarnai isi batang.
• color = untuk mewarnai batas sekitar batang.
Cara lain yang terakhir adalah menggunakan binwidth, lebar nampan yang diwakili oleh batang.

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


Seperti Diagram Batang (yang diawal), kita juga bisa men-setting sumbu y untuk bisa menampilkan frekuensi berupa bentuk persen.

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

Histogram memiliki alternatif yaitu plot densitas kernel.Density plot digunakan untuk menganalisa sebaran data. Plot densitas kernel ini hanya menggambar histogram yang diperhalus, dimana area dibawah kurva sama dengan 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")

Kita dapat menggunakan fill dan color untuk menentukan warna isian dan warna pinggiran batasannya.


Parameter Penghalusan (Smoothing)

Tingkat kehalusan di kontrol oleh parameter bandwidth atau bw. Kita dapat menggunakan fungsi bw.nrd0 untuk menemukan nilai default dari variabel tertentu. Nilai yang kecil akan menghasilkan penghalusan yang sedikit, sedangkan nilai yang besar akan menghasilkan penghalusan yang lebih banyak.

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

Meskipun plot densitas kernel mudah untuk dilihat, tapi sulit untuk melihat atau menjelaskan arti dari sumbu y pada orang awam.


Diagram Titik

Histogram memiliki alternatif lain yaitu diagram titik. Lebar dari sebuah titik sama dengan lebar bin, dan titik-titik bertumpuk, dengan setiap titik mewakili satu pengamatan. Option fill dan color digunakan untuk menentukan warna isian dan pinggir batasan masing-masing titik.

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

Bivariate digunakan untuk untuk menganalisa 2 variables dan menemukan sebuah relasi. Analisis bivariate juga merupakan salah satu cara untuk menggunakan koefisien korelasi dalam rangka menemukan apakah dua variabel memiliki relasi atau tidak. Jenis grafik yang akan dipakai juga tergantung dengan tingkat pengukuran dari variabel (Kategorikan atau Kuantitatif).

Kategorikal vs. Kategorikal

Diagram Batang Bertumpuk

Gunakan diagram batang bertumpuk untuk menampilkan hubungan bagian ke keseluruhan dan menemukan tren data dari waktu ke waktu. Akan tetapi, bagan bertumpuk tidak terlalu efektif karena batang (setiap Kategori) tidak berbagi sumbu sehingga sulit untuk membandingkan. Meskipun tidak terlalu efektif kita tetap harus mempelajarinya seperi kode dibawah ini, diagram batang bertumpuk digunakan untuk memberitahu kita apa hubungan kelas mobil dan jenis penggerak (roda depan, roda belakang, atau juga penggerak 4 roda).

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() +                                  # menggunakan tema 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

Diagram batang tersegmentasi merupakan versi lengkap dari diagram batang bertumpuk, karena pada diagram ini dijelaskan berapa besar persen pada batang. Satu batang mewakili 100 persen. Untuk membentuk diagram ini bisa menggunakan `position=“fill”. Bentuk diagram ini digunakan untuk membandingkan besaran persentasi dari variabel satu dengan yang lainnya.

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 dua garis variabel kuantitatif biasanya di tunjukkan menggunakan plot sebaran dan grafik garis.

Plot Sebaran

Plot sebaran adalah sebuah grafik yang menunjukkan hubungan antara dua set data, seperti hubungan antara umur dan tinggi. Plot ini digunakan untuk mengukur hubungan variabel dan tidak jarang juga digunakan untuk mendeteksi hubungan lain yang terdapat pada variabel tersebut.

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, dari dataset Salaries, kita bisa mencari hubungan dari pengalaman (yrs.since.phd) yang diwakilkan pada sumbu x dan gaji akademik (salary) sebagai sumbu y 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.

Untuk mengontrol atau mengatur skala pada sumbu x dan y kita bisa menggukana fungsi scale_x_continuous (sumbu x) dan scale_y_continuous (sumbu 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.

Garis regresi polinomial memberikan garis pas dengan bentuk

y^=β0+β1x+β−2x2+...+βnx2

Biasanya digunakan garis kuadrat (satu lengkungan), atau kubik (dua lengkungan). Penggunaan polinomial orde tinggi (>3) jarang diperlukan. menerapkan kesesuaian kuadrat ke data set gaji menghasilkan hasil sebagai berikut.

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

Hubungan data kategorikal dan kontinu bisa menggunakan diagram batang (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)

Pada bagian diagram batang untuk menjelaskan hubungan kategotikal dan kontinu kita akan mencari ringkasan statistik seperti mean atau median. Berikut kode untuk menampilkan rata-rata gaji (data kontinu) untuk setiap jabatan (data kategorikal).

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

Plot tipe ini biasanya untuk membandingkan hubungan 2 variabel dengan membedakan lapisan plot tiap variabel. Misal, pada kode dibawah ini dibedakan warna lapisan untuk setiap variabel jabatan.

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

Untuk menghindari terjadinya tumpang tindih lapisan yang menyebabkan tidak terlihatnya lapisan satu dengan yang lain kita bisa menggunakan opsi alpha. Nilai alpha yaitu transparan (0) sampai buram (1).

Boxplot

Boxplot adalah metode grafis untuk menggambarkan kumpulan data numerik berdasarkan nilai kuartilnya. arak antara bagian-bagian kotak yang berbeda menunjukkan derajat dispersi (sebaran), kemiringan, dan pencilan dari data tersebut. Diagram kotak garis dapat digambarkan secara horizontal maupun vertikal.



Plot kotak bertakik memberikan metode perkiraan untuk visualisasi apakah kelompok berbeda. Meskipun bukan sebuah tes yang formal, jika takik dari kedua plot kotak tidak rumpang tindih, maka ada bukti kuat (kepercayaan 95%) bahwa median dari kedua kelompok berbeda.

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

Keuntungan menggunakan plot ini adalah bisa membandingkan distribusi dari banyak kelompok dalam satu grafik. Distribusi tersebut seperti persentil ke-25, median, dan persentil ke-75.

Plot Biola

Pola Biola menunjukkan distribusi data kuantitatif dan dapat digunakan untuk membandingkan distribusi antara variabel. Ini mirip dengan plot kotak, kecuali bahwa plot ini juga menunjukkan kepadatan probabilitas data pada nilai yang berbeda, biasanya dihaluskan oleh penaksir kepadatan kernel.

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

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 garis atau plot yang menghubungkan titik-titik data dan menunjukkan kuantitas dari data-data tersebut.

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

Sebuah plot strip menggambar pola dengan sendirinya. Ini adalah pelengkap yang baik untuk boxplot atau violinplot dalam kasus di mana semua pengamatan ditampilkan bersama dengan beberapa representasi dari distribusi yang mendasarinya. Pada polt ini hubungannya lebih mudah dilihat jika titik-titiknya goyah. Pada dasarnya bilangan kecil acak ditambahkan ke setiap koordinat y. Akan lebih memudahkan untuk membandingkan kelompok jika kita menggunakan warna.

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

Agar plot ini dapat dibaca dengan mudah dibandingkan plot strip jitter sederhana, kita bisa menggunakan fungsi geom_quasirandom.

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

Data Multivariat

Multivariate digunakan untuk menganalisa lebih dari 2 variabel di waktu yang sama, trends yang dihasilkan bisa menjadi multidimensi secara alami, dengan analisa ini akan membantu kita memahami manakah data yang memiliki tren yang kompleks pada kombinasi atribut. Grafik data multivariat dibagi menjadi dua, yaitu : pengelompokan dan faceting.

Pengelompokan

Guna pengelompokan adalah untuk memplot data untuk beberapa grup dalam satu grafik. Kita akan menggunakan data set Salaries dan kita akan melihat 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 kita akan melihat jenis kelamin dari profressor, menggunakan bentuk titik untuk menentukan jenis kelamin (jika professor ini perempuan, maka bentuk titik nya lingkaran. Sedangkan professor laki-laki, maka bentuk titiknya adalah segitiga).

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


Dibawah ini adalah grafik hubungan antar tahun sejak mendapat gelar Ph.D dan gaji menggunakan ukuran dari tiitk untuk menunjukkan masa kerja, dan ini yang disebut dengan 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")


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

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)

Guna dari grafik faceting adalah membagi faset, sebuah grafik terdiri dari beberapa plot-plot terpisah atau kelipatan kecil, satu untuk setiap tingkatan dari variabel ketiga, atau kombinasi variabel.

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 dari facet_wrap untuk membuat grafik terpisah dalam setiap tingkatan jabaran nya. Fungsi dari ncol adalah untuk mengatur jumlah kolom. Dibawah ini adalah cara menggunakan dua variabel untuk mendefinisikan faset.

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


Sekarang kita akan menggunakan plot Mean/SE dan membagi faset untuk membandingkan gaji-gaji dari professor pria dan wanita, dalam jabatan dan disiplin ilmu. Kita akan membedakan jenis kelamin dan pembagian faset dengan membedakan warna untuk membuat plot-plot jabatan berdasarkan kombinasi disiplin ilmu.
Dibawah ini adalah contoh terakhir, kita akan menggunakan dataset gapminder dalam package gapminder. Fungsi tema digunakan untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran tulisan.

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


Fungsi facet_grid(.~rank+dicipline) tidak menentukan variabel baris (.). Fungsi theme() untuk membuat tea hitam dan putih dan menghilangkan garis grid vertikal dan horizontal minor. Fungsi scale_color_brewer untuk mengubah skema warna untuk titik dan batang-batang kesalahan.

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