Email:
RPubs: https://rpubs.com/invokerarts/
Linkedin: https://www.linkedin.com/in/jeffry-wijaya-087a191b5/


Visualisasi Data adalah teknik dalam mengambil informasi dari daya ke dalam konteks visual, seperti bagan, grafik, dan peta. Visualisasi data mungkin untuk membuat big data ,menjadi mudah untuk dimengerti otak manusia, dan visualisasi juga membuat mudah untuk melihat pola, trend dan pencilan dalam sebuah group data

R adalah sebuah platform yang menabjukan untuk melakukan anaisis data, mampu membuat hampir tipe grafik apapun. Buku ini membanyu Anda membuat visualisasi terpopuler - dari plot acak dan berantakan menjadi grafik yang siap di baca masyarakat. Disini kita akan belajar bagaimana cara memvisualisasi data dari unvariat, bivariat, dan multivariat. Dari paling dasar hingga tahap selanjutnya, tolong mengikuti instriksi berikut sesuai langkah.

1 Data Unvariat

Plot unvariat biasanya digunakan untuk menunjukan distribusi data dari variabel tunggal. Variabelnya bisa bersifat kategorikal (contohnya: jenis kelamin, suku, negara, kota, dll) atau kuantitatif (contohnya: umur, berat, inflasi, tingkatan, dll).

1.1 Kategorikal

Distribusi dari kategorial variabel tunggal biasanya digambarkan dengan grafik batang, grafik lingkaran, or (less commonly) a treemap.

1.1.1 Grafik Batang

Ini adalah contoh untuk menunjukan frekuensi kompulan Marriage yang saya kumpulkan dari package mosaicData. Kita menggunakan Grafik batang untuk menunjukan distribusi dari peserta acara pernikahan berdasarkan Zodiac.

library(ggplot2)                                     # Untuk visualisasi
#setwd("C:/Users/Bakti/Desktop/")                    # Jangan lupa untuk meng-set working directory
Marriage<- read.csv("Data/Marriage.csv")             # Meng-load data dari PC Anda`
ggplot(Marriage, aes(x = zodiacs)) +                 # Menetapkan distribusi untuk `Zodiacs` 
  geom_bar(fill = "cornflowerblue",color= "black")+  # Anda dapat memodifikasi warna 
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(x = "Zodiacs",                                # Anda dapat memodifikasi label dan judul plot
       y = "Frequency", 
       title = "Marriage Participants by Zodiacs")         
Categorical Bar Chart 1

Categorical Bar Chart 1

Badang dapat menunjukan persen dibandingkan jumlahnya. Untuk grafik batang (zodiacs), perintah aes(x=sign) sebenarnya adlaah jalan pintas sebagai aes(x = sign, y = ..count..), dimana ..count.. merupakan variabel spesial yang menunjukan frekuensi setiap kategori. Anda dapat menggunakan ini untuk mengkalkulasi presentasi, dengan mengspesifikasi variabel y secara eksplisit.

Dalam R, Warna dapat dispesifikasikan dengan nama (contohnya: col = “red”) seperti yang anda dapat lihat pada gambar berikut

Atau anda dapat memasukan warna dengan menggunakan hexadecimal RGB triplet (seperti col = “#FFCC00”) More. Selain itu, Anda juga dapat menggunakan sistem warna lain seperti yang ada pada pacage RColorBrewer More dan package grDevices (Anda mungkin telah meng-loadnya) yang berisi beberapa palet, ketik ?rainbow pada Rconsole Anda. Mari kita menanggapi grafik berikut:

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, 
   aes(x = zodiacs, 
       y = ..count.. / sum(..count..))) + 
  geom_bar(fill = rainbow(12), color= "azure4") +
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(x = "Zodiacs", 
       y = "Percent", 
  title  = "Marriage Participants in Percent") +
  scale_y_continuous(labels = scales::percent)       # Menambahkan simbol % untuk label sumbu y  
 Categorical Bar Chart 2

Categorical Bar Chart 2

Mengurutkan batang berdasarkan frekuensi merupakan hal yang sangat berguna. Pada perintah dibawah, frekuensi dihitung secara eksplisit. Kemudian fungsi reorder digunakan untuk mengurutkan kategori berdasarkan frekuensinya. Pilihan stat="identity" menyatakan fungsi plot tidak menghitung jumlah, karena mereka disiapkan secara langsung.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
plotdata <- Marriage %>%                             # meng-load dataset
 count(zodiacs)                                      # count of participants in each `zodiacs`
# Meng-plot batang secara menaik
ggplot(plotdata,                                     
       aes(x = reorder(zodiacs, n), 
           y = n)) + 
  geom_bar(stat = "identity",
           fill = rainbow(12), 
           color= "azure4") +
   theme_minimal() +                                  # Menggunakan tema minimalis
  labs(x = "Zodiacs", 
       y = "Frequency", 
  title  = "Sorting Categories")
Categorical Bar Chart 3

Categorical Bar Chart 3

Jika Anda mau label tiap batang merupakan suatu bilangan, periksalah perintah berikut:

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
# Meng-plot batang sebagai presentase secara 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 minimalis
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Labeling Bars")
Categorical Bar Chart 4

Categorical Bar Chart 4

Terkadang label kategori mungkin saling tertimpa, itu sangan menyebalkan bukan?. Jadi, Anda dapat memutar label suatu sumbu.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
# Meng-plot batang sebagai presentase 
# Secara 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() +                                  # Menggunakan tema minimalis
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Overlapping Labels")+
  theme(axis.text.x = element_text(angle = 25, hjust = 1))
Categorical Bar Chart 5

Categorical Bar Chart 5

Secara alternatif, Anda dapat mengatasi situasi ini dengan memutar sumbu x dan y.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
# Meng-plot batang sebagai presentase 
# secara 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() +                                  # Menggunakan tema minimalis
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Overlapping Labels")+
  coord_flip()
Categorical Bar Chart 6

Categorical Bar Chart 6

1.1.2 Grafik Lingkaran

Grafik Lingkaran masih bersifat kontrovensi dalam statistik. Jika tujuan Anda adalah untuk membandingkan frekuensi dari suatu kategoti, Anda lebih baik menggunakan Grafik batang (Manusia lebih baik dalam menilai dengan panjang batang dibandingkan volume bagian-bagian lingkaran). Jika tujuan Anda untuk membandingkan masing-masing kategori dengan keseluruhan (contohnya berapakah porsi dari anggota yang Hispanic dibandingkan dengan seluruh anggota yang mengikuti sebuah acara), dan jumlah dari kategorinya kecil, kemudian mungkin grafik lingkaran cocok bagi Anda. Kita menggunakan lebih banyak perintah untuk membuat Grafik lingkaran yang menarik dalam R.

Ini adalah contoh untuk membuat grafik lingkaran ggplot2 dasar:

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi 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 grafik lingkaran
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")
Categorical Pie Chart

Categorical Pie Chart

Grafik donat adalah grafik lingkaran yang memiliki lubang di dalamnya. Perbedaannya antara grafik lingaran hanya terdapat perintah yang kita buat yaitu: x = 2 danxlim = c(0.5, 2.5) untuk membuat lubang di dalam grafik lingkaran. Selain itu, argumen width dalam fungsi geom_bar() tidak diperlukan lagi.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis
# Membuat grafik 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")
Categorical Donut Chart 1

Categorical Donut Chart 1

Sekarang mari kita masuk kebagian menariknya dan menambahkan label, ketika menghapus lagenda.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis
# Menambahkan label persen
plotdata$percent <- paste0(plotdata$race, "\n",
                         round(plotdata$prop), "%")
# Membuat grafik 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 = percent), color = "white")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Marriage Participants by Race")
Categorical Donut Chart 2

Categorical Donut Chart 2

  #theme(legend.position = "FALSE")

1.1.3 Tree Map

Alternatif untuk grafik lingkaran adalah treemap. Tidak seperti grafik lingkaran, ini dapat mengatasi variabel kategorikal yang memiliki banyak tingkatan.

library(ggplot2)                                     # Untuk visualisasi
library(treemapify)                                  # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis
plotdata <- Marriage %>%
  count(officialTitle)
ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n)) +
  geom_treemap() + 
  labs(title = "Marriage Participants by Officiate")
Categorical Tree Map 1

Categorical Tree Map 1

Ini adalah versi yang lebih berguna dengan label.

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")
Categorical Tree Map 2

Categorical Tree Map 2

1.2 Kontinu

Distribusi dari variabel kuantitatif tunggal biasa di-plot menggunakan,plot kernel density, atau plot titik.

1.2.1 Histogram

Dengan menggunakan data set Marriage, mari plot umur dari anggota yang mengikuti acara pernikahan.

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

Quantitative Histogram

Kebanyakan anggota yang mengikuti pernikahan muncul di sekitar awal 20 tahun dengan kelompok lain di umur 40-an, dan yang lebih kecil lagi umut 60-an serta awal 70-an. Warnna histogram dapat dimodifikasi dengan dua cara:

  • fill - meng-fill warna untuk batangnya
  • color - mem-border warna disekitar batangnya

Secara alternatif, Anda dapat menspesifikasi binwidth, lebar dari bins yang ditunjukan dari batangnya.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "cornflowerblue", 
                 color = "white", 
                 binwidth = 5) +
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(title="Marriage Participants by age (Alternative Bins and bandwidths)", 
       y = "Percent",
       x = "Age") +
  scale_y_continuous(labels = percent)
Quantitative Histogram 2

Quantitative Histogram 2

Seperti grafik batang, sumbu y dapat menunjukan jumlah atau persen dari total data.

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

Quantitative Histogram 3

1.2.2 Plot Kernel Density

Alternatif untuk hisogram adalah plot kernel density. Secara teknis, estimasi kernel density adalah metode nonparametrik untuk mengestimasi kepadatan peluang dari variabel acak kontinu. (Maksudnya??) Jadi, kita mencoba untuk menggambar histogram yang dihaluskan dimana daerah dibawah kurva sama dengan satu.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "indianred3") +
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(title = "Marriage Participants by age")
Quantitative Kenel Density Plot

Quantitative Kenel Density Plot

Grafik diatas menunjukan distribusi dari nilai. Sebagai contoh, proporsi kasus diantara umur 20 dan 40akan ditunjukan dengan area dibawah kurva 20 dan 40 pada sumbu x. Seperti pada grafik sebelumnya, kita juga dapat meng-full atau mewarnai border dari grafik tersebut.

1.2.3 Parameter penghalusan

Tingkat dari kehalusan dicontrol berdasarkan paramater bandwidth bw. Untuk mencari nilai awal bagi suatu variabel, gunakan fungsi bw.nrd0. Nilai yang lebih besar akan menghasilkan penghalusan lebih, ketika nilai yang lebih kecil akan mendapatkan sedikit menghalusan.

library(ggplot2)                                     # Untuk visualisasi
bw.nrd0(Marriage$age)                                # Bandwidth dasar untuk variabel umur
## [1] 5.181946
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "deepskyblue", 
               bw = 1) +
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(title = "Participants by age",
       subtitle = "bandwidth = 1")
Smoothing Parameter Plot

Smoothing Parameter Plot

Plot kernel density membuat anda dapat dengan mudah melihat nilai dengan frekuensi yang paling tinggi dan yamg mana yang langka. Namun ini ini akan menyusahkan dalam menjelaskan arti dari sumbu y kepada orang-orang yang bukan statiskawan. (Tapi itu akan membuat anda terlihat sangat pindah dalam acara!)

1.2.4 Plot titik

Alternatif lain untuk histogram adalah Plot titik. Lagi-lagi variabel kuantitatif dibagi menjadi beberapa bins, namun dibandungkan menggunakan batang, setiap observasi digambarkan dengan titik. Sebagai awal, lebar dari titik bergantung pada lebar bin dan titiknya akan menumpuk, dengan setiap titiknya menyatakan satu observarsi. Ini berguna paling baik ketika jumlah observasinya kecil (katakanlah kurang dari 150). Pengaturan isi dan warna dapat digunakan untuk mengspesifikasikan tiap titik dengan warna yang berbeda.

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

Dot Chart

Masih banyak pilihan yang dapat digunakan. Tekan here Untuk detail dan contohnya.

2 Data Bivariat

Grafik bivariat menunjukan hubungan diantara dua variabel. Tipe grafiknysa akan ditentukan dari perkiraan tingkat variabel (kategorikal atau kuantitatif)

2.1 Kategorikal Dengan Kategorikal

2.1.1 Grafik Batang yang Tertumpuk

Mari kita plot hubungan antara kelas mobil dengan tipe drive-nya (roda depan, roda belakang, atau roda 4) untuk mobil dalam Fuel economy dataset.

library(ggplot2)                                     # Untuk visualisasi
mpg$drv<-factor(mpg$drv, 
                levels = c("f", "r", "4"),
                labels = c("front-wheel", "rear-wheel", "4-wheel"))
# Grafik Batang yang Tertumpuk
ggplot(mpg, 
       aes(x = class, 
           fill = drv)) + 
  geom_bar(position = "fill") +
  theme_minimal() +                                  # Menggunakan tema minimalis
  labs(y = "Proportion")
Stacked Bar Chart

Stacked Bar Chart

2.1.2 Grafik Batang yang Dikelompokan

Grafik batang yang dikelompokan meletakan batang untuk kategori ke-dua secara bersebelahan. Untuk membuat plot grafik batang yang dikelompokan, gunakan pilihan position = "single". Ingat bahwa opsi ini hanya akan ada pada versi terbaru dari ggplot2, namun seharusnya akan ada dalam waktu dekat.

library(ggplot2)                                     # Untuk visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
  theme_minimal() +                                  # Menggunakan tema minimalis
  geom_bar(position = position_dodge(preserve = "single"))
Grouped Bar Chart

Grouped Bar Chart

2.1.3 Grafik Batang Terbagi

Grafik Batang Terbagi adalah plot batang tertumpuk dimana masing-masing batang menyatakan 100 persen. Anda dapat membuat grafik batang terbagi menggunakan opsi position = “filled”. Tipe plot ini biasa sangan efektif untuk membandingkan presentase dari kategori dalam satu variabel dengan tingkatan variabel lainnnya. Sebagai contoh, proporsi roda depan meningkat selagi Anda berpindah dari kompak, ke ukuran normal, dan ukuran minivan.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
# Membuat laporan dataset (Manupulasi Data)
plotdata <- mpg %>%
  group_by(class, drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
# Membuat grafik batang terbagi
# Menambahkan label masing-masing 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 minimalis
  labs(y = "Percent",
       fill = "Drive Train",
       x = "Class",
       title = "Automobile Drive by Class") +
  theme_minimal()
Segmented Bar Chart

Segmented Bar Chart

Catatan: Anda dapat menggunakan opsi tambahan untuk meningkatkan warna dan penamaan. Dengan fungsi dibawah

  • factor memodifikasi urutan dari kategori untuk kelas variabel dan kedua order serta labelsnya untuk variabel drive
  • scale_y_continuous memodifikasi tanda label sumbu y
  • labs menyediakan judul dan mengubah lavel untuk sumbu x dan y serta lagenda
  • scale_fill_brewer mengubah isi warna bagan
  • theme_minimal menghapus background abu-abu dan mengganti dengan grid warna Fungsi lainnya akan didiskusikan lebih dibahas di bagian Advance Data Visualization.

2.1.4 Plot Mosaik

Grafik mosaik dapat menunjukan hubungan antara variabel kategorikal menggunakan persegi panjang yang areanya menyatakan proporsi dari kasus yang diberikan dengan kombinasi tingkatan. Warna dari garis juga dapat menyatakan tingkan hubungan antar variabel.

Meskipun grafik mosial dapat dibuat menggunakan ggplut dengan package ggmosaic, Saya merekomendasikan menggunakan package vcd. Meskipun intu tidak akan membuat grafik ggplot2, package ini menyediakan jangkauan yang lebih komprehensif untuk memvisualisasi data kategorikal.

Orang tertarik dengan Titanic. Dalam bencana Titanic,apa peran jenis kelamin dan kelas dalam keselamatan? Kita dapat memvisualisasikan hubungan ketiga variabel kategorikal tersebut menggunakan perintah dibawah.

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

Basic mosaic plot

Ukuran untuk perbukaan adalah proporsional berdasarkan dari kasus yang dikombinasikan dari tingkatannya. Dapat dilihat dengan jelas bahwa lebih banyak penumpang yang meninggal dunia, dibandingkan selamat. Mereka yang meninggal dunia rata-rata adalah laki-laki pada kelas tingkat 3 dan anggota awak kapal.

Jika kita mengasumsikan ketiga variabel tersebut adalah independen, kita dapat meneliti residual dari model dan ukuran permukaan untuk menyamakan. Dalam grafik dibawah, permukaan biru gelap menunjukan kasus lebih banyak dari pada kebanyakan orang. Sedangkan permukaan merah gelap menunjukan kasus yang lebih sedikit dari kebanyakan orang.

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")
Mosaic plot with shading

Mosaic plot with shading

Kita dapat melihat bahwa jika kelas, jenis kelamin, dan keselamatan adalah independen, kita melihat lebih banyak anggota awak kapal laki-laki meninggal dunia dan perempuan kelas 1, 2 dan 3 bertahan hidup lebih dari yang diperkirakan. Sebaliknya, sedikit penumpang kelas 1 (pria maupun wanita)meninggal lebih dari yang diperkirakan. Jadi asumsi bahwa ini independent ditolak.

2.2 Kontinu Dengan Kontinu

Hubungan antara 2 variabel data kuantitatif dan biasanya ditunjukan menggunakan scatterplots dan grafik garis.

2.2.1 Scatterplot

Scatterplot dibuat untuk mempelajari hubungan diantara 2 varibel. Jadi ini sering digunakan untuk melakukan perhitungan korelasi koefisien yang biasanya dipakai untuk mengukur hubungan linearnya. Akan tetapi, tiper lain dari hubungan dapat dideteksi dengan scatterplot dan terkadang untuk menjelaskan nilai dari y merupakan fungsi dari x. Ini adalah contoh pola yang dapat anda deteksi dengan scatterplot.

library(ggplot2)                                   # Visualisasi data
library(hrbrthemes)                                # Untuk `theme_ipsum()` dan lagenda
# 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")
relationship scatterplots

relationship scatterplots

Bentuk paling sederhana dari 2 variabel kuantitatif adalah scatterplot, dengan setiap variabel ditunjukan dalam suatu sumbu. Sebagai contoh, menggubakan data set gaji, kita dapat meng-plot pengalaman kerja dengan gaji untuk college Professors.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
data(Salaries, package="carData")
# Meningkatkan scatterplot
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 minimalis
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot 1

Scatterplot 1

Notes: opsi geom_point dapat digunakan untuk mengubah

  • color - Warna titik
  • size - Ukuran titik
  • shape - Bentuk titik
  • alpha - Transparansi titik. Jarak transparansi adalah dari 0 (transparan) sampai 1 (buram), dan ini berguna untuk parameter yang memiliki titik tertimpa.

Fungsi scale_x_continuous dan scale_y_continuous mengatur ukuran dari masing-masing sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat scatterplot yang lebih menarik.

2.2.2 Trendline Scatterplot

Sangat berguna untuk melaporkan hubungan yang ditunjukan pada scatterplot, menggunakan best fit line. Ada banyak tiper dari garis yang bisa dibuat, diantaranya linear, polinomial, dan nonparametrik. Secara umum, tingkat kepercayaan 95% adalah batas untuk garis ini ditunjukan.

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 minimalis
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot Linear

Scatterplot Linear

Dengan jelas , gaji meningkat dengan pengalaman. Namun, terdapat keanehan di baigan akhir - profesor yang sangat berpengalaman, mendapatkan gaji yang rendah. Sebuah garis lurus tidak dapat menangkap efek non-linear. Garis dengan sedikit lengkungan akan lebih baik disini.

Garis regresi polinomial menyediakan haris dengan formula

\[\begin{equation} \label{eq:1} \hat{y}=\beta_0+\beta_1x+\beta_2x^2+\cdots+\beta_nx^2 \end{equation}\]

Tipe garis fungsi kuadrat (1 lengkungan), atau kubik (dua lengkungan) digunakan. Sangat langka untuk mengunakan polinomial dengan ordetinggi \(( >3 )\). Menerapkan garis fungsi kuadrat akan 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 minimalis
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot Quadratic

Scatterplot Quadratic

Yang terakhir, garis non-parametrik yang dihaluskan dapat menunjukan gambaran dari suatu hubungan dengan baik. Secara umum, dalam ggplot2 adalah loess garis yang secara langsung menghaluskan scatterplot.

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 minimalis
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009") +
  theme_minimal()
Scatterplot Smoothed Nonparametric

Scatterplot Smoothed Nonparametric

2.3 Kategorikal Dengan Kontinu

Ketika kita mem-plot hubungan antara variabel kategorikan dan kuantitatif, banyak jumlah tipe grafik yang dapat digunakan. Ini termasuk diagram batang menggunakan summary dari statistik, plot kernel density, box plot, violin plot, mean plot, ridgeline plot dan Cleveland plot.

2.3.1 Grafik Batang

Dalam bagian sebelumnya, grafik batang digunakan untuk menunjukan jumlah dari kasus berdasarkan kategori untuk variabel tunggal maupun dua variabel. Anda juga dapat menggunakan grafik batang untuk menunjukan laporan statistik lainnya (contohnya: rata-rata dan nilai tengah) pada variabel kuantitatif untuk masing-masing tingkat kategori.

Sebagai contoh, grafik berikut menunjukan rata-rata gari untuk sampel dari porfesor universitas berdasarkan tingkat akademik mereka.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Mengdetermasi label secara otomatis 
data(Salaries, package="carData")
# Menghitung rata-rata gaji setiap tingkatnya
plotdata <- Salaries %>%
  group_by(rank) %>%
  dplyr::summarize(mean_salary = mean(salary))
# Mem-plot rata-rata gaji dalam bentuk 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 minimalis
  labs(title = "Mean Salary by Rank", 
       subtitle = "9-month academic salary for 2008-2009",
       x = "",
       y = "")
Bar Chart (Summary statistics)

Bar Chart (Summary statistics)

2.3.2 Kernel Density Plot yang Dikelompokan

Salah satu cara juta daoat membandingkan group dari varibel numerik adlaah dengan menumpukan plot kernel density dalam satu grafik. Mari kita plot distribusi dari gaji berdasarkan tingkat akademik menggunakan plot kernel density.

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

Grouped Kernel Density Plots

Opsi alpha membuat kepadatan plot sedikit transparan sehingga ktia dapat melihat apa yang terjadi dibelakang grafik yang saling menimpa. Jarak nilai alpha adalah dari 0 (transpan) sampai 1 (buram). Grafiknya dengan jelas memberi tahu bahwa gaji naik dengan tingkat akademik. Namun, jarak antar gaji untuk para profesor sangatlah lebar.

2.3.3 Box Plot

Sebuah box-plot menunjukan persentil ke-\(25\) , nilai tengah, dan persentil ke-\(75\) dari suatu distribusi. Sumbu vertikal menerina sekitar 99% dari distribusi normal dan observasi yang diluar jangkauan diplot sebagai titik yang disebut outliers (lihatlah figur di bawah ini)

Box Plots

Box Plots

Box plot yang bersebelahan sangat berguna untuk membandingkan kelompok (contohnya: tingkat dari variabel kategorikal) dalam variabel numerikal. Mari kita plot distribusi dari gaji berdasarkan tingkat pendidikan menggunakan box plot. Notched box-plots menyediakan metori perkiraan untuk memvisualisasikan apakah kelompok-kelompok yang ada berbeda. meskipun ini bukan tes secara formal, jika notched box plotnya tidak saling menimpa, ada bukti yang kuat ( tingkat kepercayaan sebesar 95%) bahwa nilai tengah dari groupnya 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")
Box Plots

Box Plots

Pada contoh diatas, semua 3 kelompok muncul di ketinggian yang berbeda. salah satu keuntungan dari box plot adalah lebarnya terkadang tidak memiliki arti yang penting. Ini membuat anda dapat membandingkan distribusi banyak kelompok dalam satu grafik.

2.3.4 Violin Plot

Violin plot mirip dengan plot kernel density namun terbalik dan diputar sebesar \(90^o\). Mari kita plot distribusi dari gaji berdasarkan tingkat pendidikan menggunakan violin plot.

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

Violin Plots

2.3.5 Ridgeline Plots

Ridgeline plot (atau biasa disebut joy plot) menunjukan distribusi dari variabel kuantitatif beberapa kelompok. Mereka mirip dengan plot kernel density dengan faceting vertikal, tetapi menggunakan lebih sedikit tempat. Ridgeline plot dibuat dengan pacakage ggridges.

Dengan menggunakan dataset Fuel economy , mari kita plot distribusi dari pengendara di kota per galon berdasarkan kelas mobilnya.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                                    # Untuk mengatasi visualisasi yang tertimpa
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")
Ridgeline Plots

Ridgeline Plots

Saya tidak menunjukan legenda di sini karena itu kurang beguna (distribusinya telat dilabel pada sumbu y). Tidak mengherankan, pickup truck memiliki jarak tempuh paling rendah, sedangkan mobil subcompact dan compact cendrung mencapai rating. Namun ada jarak yang sangat lepar pada jumlah gas milage untuk mobil-mobil kecil.

Catat bahwa kemungkinan distribusi yang tertimpa adalah masalah bagi grafik compact. Anda dapat menambahkan transparansi jika terdapat grafik yang tertimpa dengan geom_density_ridges(alpha = n), dimana jarak n dari 0 (transparan) sampai 1 (buram). Lihatlah package vingnette untuk lebih detailnya.

2.3.6 Line Plots

Metode populer untuk membandingkan kelompok dalam variabel numerik adalah mean plot dengan garis error. Garis error dapat menunjukan standar deviasi, standar error dari rata-rata, atau tingkat kepercayaan. Dalam bagian ini, kita akan mem-plot rata-rata dan standar error. Kita dapat menggunakan teknik yang sama seperti membandingkan gaji dengan tingkat pendidikan dan jenis kelamin. (Secara teknik, ini bukan bivariat karena kita memploting gaji, tingkat terhadap akademik dan jenis kelamin)

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                                    # Untuk mengatasi visualisasi yang tertimpa
# Menghitung rata-rata, standar deviasi,
# standar errors, dan tingkat kepercayaan 95% 
# Interval berdasarkan tingkat pendidikan
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 mean plot
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")
Line Plots

Line Plots

2.3.7 Strip Plots

Hubungan antara variabel kelompok dan variabel numerik dapat ditunjukan denganscatter plot. Sebagai contoh, plot dari distribusi gaji berdasarkan tingkat pendidikan menggunakan strip plots. Scatterplot 1 dimensi ini disebut strip plots. Sayangnya, titik data yang berlebihan membuat kesulitan dalam menginterpretasi. Hubungannya akan lebih mudah dilihat jika titiknya bersifat jitter. Pada dasarnya, beberapa angka acak ditambahkan ke tiap sumbu y. Ini akan lebih budah jika kita membandingkan kelompok dengan warna yang berbeda.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Memperkirakan 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")
Strip Plots

Strip Plots

Opsi legend.position = "none" digunakan untuk menekankan lagenda (dimana tidak dibutuhkan disini). Jittered plot sangat berguna untuk data yang titiknyan tidak terlalu besar.

2.3.8 Jitter and Boxplots

Terkadang mungkin akan lebih mudah mengvisualisasi sebuah distribusi jika kita menambahkan box plot pada jitter plot. Beberapa opsi akan ditambahkan untuk membuat plot ini.

  • For the boxplot:
    • size = 1 membuat garisnya menjadi lebih tebal
    • outlier.color = "black" membuat pencilannya menjadi hitam
    • outlier.shape = 1 menspesifikasi lingkaran untuk pencilan
    • outlier.size = 3 meningkatkan ukuran pencilan
  • For the jitter:
    • alpha = 0.5 membuat titiknya menjadi lebih transparan
    • width = .2 mengurangi jumlah jitter (umumnya adalah .4)

Dan terakhir, sumbu \(x\) dan \(y\) dipengaruhi menggunakan fungsi coord_flip (untuk membuat grafik berarah ke samping).

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Memperkirakan 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()
Combining Jitter and Boxplots 1

Combining Jitter and Boxplots 1

Sebelum menuju plot selanjutanya, sangat penting untuk diingatkan bahwa fungsi geom_boxjitter tersetia dalam package ggpol. Ini membuat gabungan boxplot - setengah boxplot, setengah scatterplot.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Memperkirakan infrastruktur
library(ggpol)                                       # Boxplot camputan - setengah scatterplot
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")
Combining Jitter and Boxplots 2

Combining Jitter and Boxplots 2

2.3.9 Beeswarm Plots

Beeswarm plots (juga disebut violin scatter plot) mirip seperti jittered scatterplot, didalam sini mereka menunjukan distribusi variabel kuantitatif berdasarkan titik plotting dengan cara mengurangi titik yang tertimpa. Sebagai tambahan, mereka juga membantu menunjukan kepadatan data pada masing-masing titik (secara pengertian, ini mirip dengan violin plot). Melanjutkan dari contoh sebelumnya

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Memperkirakan infrastruktur
library(ggbeeswarm)                                  # Mengurangi titik yang tertimpa
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")
Beeswarm Plots

Beeswarm Plots

Plot ini dibuant menggunakan fungsi geom_quasirandom. plot ini dapat dengan mudah dibaca dibantingkan jittered strip plots sederhana. Untuk belajar lebih mengenai plot ini, lihat Beeswarm-style plots dengan ggplot2.

2.3.10 Cleveland Dot Charts

Cleveland plots berguna ketika Anda ingin membandingkan statistik numerik untuk angka dalam jumlah yang sangat besar. Sebagai contoh, katakanlah Anda ingin membandingkan tingkat harapan hidup untuk negara di Asia pada tahun 2007 menggunakan dataset gapminder.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Memperkirakan infrastruktur
library(ggbeeswarm)                                  # Mengurangi titik yang tertimpa
library(gapminder)                                   # Untuk dataset `gapminder` 
data(gapminder, package="gapminder")                 # Meng-load dataset `gapminder` 
# subset Asian countries in 2007
library(dplyr)
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)
# Fancy Cleveland plot
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())
Beeswarm Plots

Beeswarm Plots

Jepang dengan jelas memiliki tingkat harapan hidup paling tinggi, ketika Afganistan memiliki yang paling rendah. Plot ini juga disebut grafik lolipop.

3 Data Multivariat

Grafik multivariat menunjukan hubungan dari tiga atau lebih variabel. Ada dua metode yang sering digunakan untuk mengakomondari banyak variabel: grouping dan faceting.

3.1 Grouping

Dalam grouping, nilai dari 2 variabel pertama di letakan pada sumbu x dan y. Kemudian tambahan akan dipetakan dengan visual lainnya seperti warna, bentuk, ukuran, jenis garis, dan transparansi. Grouping membuat anda untuk memplot data dari banyak kelompok mejadi satu gradfik. Mengugnakan data set Salaries , mari kita tunjukan hubungan antara yrs.since.phd dan gaji.

library(carData)                                     # Untuk data set
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")
Multivariate Grouping Plot 1

Multivariate Grouping Plot 1

Kemudian, mari tambahkan jenis kelamin dari profesor, menggunakan bentuk dari titik untuk menyatakan jenis kelamin. Kita akan meningkatkan ukuran titik dan menambahkan transparansi untuk membuat titik terlihat jelas.

library(carData)                                     # Untuk data set
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")
Multivariate Grouping Plot 2

Multivariate Grouping Plot 2

Kita tidak dapat mengatakab bahwa ini grafik yang bagus. Ini terlihat sangat berantakan, dan ini dapat mempersulit untuk memisahkan profesor laki-laki dari wanita. Faceting (akan dibahas di bagina selanjutnya) mungkin akan menghasilkan hasil yang lebih baik.

Lihatlah bahwa ada perbedaan antara spesifikasi nlai konstanta (seperti size = 3) dan pemetaan dari variabel untuk visual karakteristik (contohnya: color=rank). Pemetaan selalu diletakan didekat fungsi aes, ketika tugas dari nilai konstat akan selalu nampak diluar dari fungsi aes.

Ini adlaah contoh yang lebih jelas. Kita akan menggambar grafik hubungan antara tahun sejak Ph.D dan gaji menggunakan ukuran dari point menyatakan tahun dalam pelayanan.

library(carData)                                     # Untuk data set
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")
Multivariate Grouping Plot 3

Multivariate Grouping Plot 3

Dapat dilihat dengan jelas bahwa ada hubungan positif antara tahun sejak Ph.D dan tahun dalam pelayanan. Asistem profesor jatuh pada jarak 0-11 tahun sejak Ph.D. dan 0-10 tahun tahun dalam pelayanan. Jelas bahwa profesional berpengalaman tidak teoat menjadi asisten profesor (mereka bisa jadi naik jabatan atau meninggalkan unversitas). Kita tidak mencari batasan waktu yang sama diantara rekan profesor dan profesor. Bubble plots akan dijelaskan di bagian yang akan mendatang.

Sebagai contoh terakhit, mari kita lihat pada yrs.since.phd dengan gaji dan tambahkan jenis kelamin menggunakan warna serta garis kuadrat terbaik.

library(carData)                                     # Untuk data set
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",
       subtitle = "9-month salary for 2008-2009",
       y = "",
       color = "Sex") +
  scale_y_continuous(label = scales::dollar) +
  scale_color_brewer(palette = "Set1") +
  theme_minimal()
Multivariate Grouping Plot 4

Multivariate Grouping Plot 4

3.2 Faceting

3.2.1 Faceting 1

Grouping memampukan Anda untuk melakukan plot terhadap banyak variabel dalam satu grafik, menggunakan karakteristik visual seperti warna, bentuk, dan ukuran. Dalam faceting, grafil dipisahkan menjadi beberapa plot atau grafik kecil, dimana satu untuk tingkatan level ketiga, atau kombinasi dari variabel. Ini akan lebih mudah di mengerti 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")
Multivariate Faceting 1

Multivariate Faceting 1

Fungsi facet_wrap membuat grafik terpisah untuk setiap tingkatan tingkat akademik. Opsi ncol digunakan untuk mengatur jumlah kolom. Di contoh selanjutnya, dua variabel akan digunakan untuk mengambarkan facet.

3.2.2 Faceting 2

Disini, fungsi memasukan jenis kelamin pada baris dan tingkan akademik dalam kolom, membuat sebuah matrik dengan 6 plot pada 1 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)")
Multivariate Faceting 2

Multivariate Faceting 2

3.2.3 Faceting 3

Kita juga dapat mengkombinasikan grouping dan faceting. Mari kita menggunakan plot rata-rata atau standar error dan faceting untuk membandingkan gaji dari profesor laki-laki dan perempuan, dalam tingkan pendidikan dan cara mengajar Kita akan menggunakan warna untuk menandakan jenis kelamin dan faceting untuk membuat plot bagi kombinasi tingkat akademik berdasarkan cara mengajar.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk Visualisasi
library(dplyr)                                       # Manupulasi data
# Menghitung rata-rata dan standar error berdasarkan jenis kelamin,
# Tingkat pendidikan dan kedisiplinan
plotdata <- Salaries %>%
  group_by(sex, rank, discipline) %>%
  dplyr::summarize(n = n(),
            mean = mean(salary),
            sd = sd(salary),
            se = sd / sqrt(n))
# Membaut label lebih baik untuk cara mengajar
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")
Multivariate Faceting 3

Multivariate Faceting 3

Pernyataan facet_grid(. ~ rank + discipline) mengspesifikasi bahwa tidak ada baris variabel (.) dan kolom mendefinisikan kombinasi dari tingkat akademik dan cara mengajar.

Fungsi theme() membuat tema hitam putih dan menghapus garis vertikal serta sedikit garis horizontal. fungsi scale_color_brewer() merubah warna dari titik kan garis errornya.

Dalam pandangan pertama, ini menunjukan bahwa mungkin perbedaan jenis kelamin dalam gaji untuk daerah rekan profesor dan profesor pada cara oengajar secara teori. Saya berkata “mungkin” karena kita belum melakukan test formal untuk mengambil hipotesis (Kita mengunakan ANCOVA dalam kasus ini) Perhatikan bagian Customizing untuk belajar mengenai cara untuk mengubah tampilan grafik.

3.2.4 Faceting 4

Sebagai contoh terakhit, kita akan mengubah ke data set baru dan plot perubahan dalam tingkat harapan hidup dari waktu ke waktu pada negara-negara di “Asia”. Data datang dari data set gapminder dalam package gapminder. Setiap negara menunjukan facetnya masing-masing. Fungsi tema digunakan untuk menyederhanakan warna background, memutar teks pada sumbu x, dan membuat ukuran tulisannya lebih kecil.

library(gapminder)                                   # Untuk dataset
library(ggplot2)                                     # Untuk Visualisasi
library(dplyr)                                       # Manupulasi data
# Mem-plot tingkat harapan hidup berdasarkan tahun secara terpisah 
# Untuk setiap negara di Asia
data(gapminder, package = "gapminder")

# Pilih data Asia
plotdata <- dplyr::filter(gapminder, 
                          continent == "Asia")

# Mem-plot tingkat 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") 
Multivariate Faceting 4

Multivariate Faceting 4