Algoritma & Struktur Data

~ Pertemuan Ke-13 ~


Kontak : \(\downarrow\)
Email
RPubs https://rpubs.com/ainun/

Visualisasi Data

Visualisasi data adalah representasi grafis dari informasi dan data. Dengan elemen visual seperti bagan, grafik, dan peta, alat visualisasi data menyediakan cara yang dapat diakses untuk melihat dan memahami tren, outlier, dan pola dalam data.Di dunia Big Data, alat dan teknologi visualisasi data sangat penting untuk menganalisis sejumlah besar informasi dan membuat keputusan berdasarkan data.

Mata kita tertarik pada warna dan pola. Kita dapat dengan cepat mengidentifikasi merah dari biru, persegi dari lingkaran. Budaya kita adalah visual, termasuk segala sesuatu mulai dari seni dan iklan hingga TV dan film. Visualisasi data adalah bentuk lain dari seni visual yang menarik minat kita dan mengarahkan pandangan kita pada pesan. Saat kita melihat grafik, kita dengan cepat melihat tren dan outlier. Jika kita dapat melihat sesuatu, kita menginternalisasikannya dengan cepat. Ada nya visualisasi data memiliki tujuan .

Visualisasi data sangat banyak macamnya. Namun kali ini kita hanya membahas Univariat, Bivariat, dan Multivariat.

R dan Python merupakan platform yang mampu memvisualisasikan hasil analisis data dengan membuat hampir semua jenis grafik. Secara spesifik, materi ini akan terfokus pada teknik visualisasi data Univariant, Bivariant, dan Multivariant.

Univariat (Satu Variabel)

Plot visualisasi data univariat membantu kita memahami sifat enumeratif serta ringkasan deskriptif dari variabel data tertentu. Plot-plot ini membantu dalam memahami lokasi/posisi pengamatan dalam variabel data, sebarannya, dan sebarannya. Plot univariat terdiri dari dua jenis: 1) Plot Kategoris , contoh : Jenis kelamin, ras, negara, kota. 2) Plot Numerik , contoh : Usia, berat badan, inflasi, suku bunga.

Variabel Kategori

Distribusi variabel ketagori tunggal biasanya diplot dengan diagram batang, diagram lingkaran, atau diagram pohon (namun jarang digunakan)

Diagram Batang

library(ggplot2)
#setwd("C:/Users/lenovo/Documents/data/Book1.xlsx")
Book1 <- readxl::read_excel("C:/Users/lenovo/Documents/data/Book1.xlsx")
ggplot(Book1, aes(y = Merk)) +
  geom_bar(fill = "lightcyan2",
           color = "plum2") +
  theme_minimal() +
  labs(x = "Variant",
       y = "Merk",
       title = "Hasil survey")

library(ggplot2)                        # Untuk visualisasi
#setwd("C:/Users/lenovo/Documents/data")
Marriage <- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv")
ggplot(Marriage, aes(x = "Zodiacs")) +
  geom_bar(fill = "lightcyan",
           color = "azure4") +
  theme_minimal() +
  labs(x = "Zodiacs",
       y = "Frekuensi",
       title = "Partisipasi pernikahan berdasarkan zodiak")

Pada diagram batang dapat ditampilkan dalam bentuk persen dari frekuensi. Untuk diagram batang (zodiak) dapat menggunakan kode aes(x=sign) yang merupakan shortcut dari aes(x=sign, y=..count..) , di mana ..count.. merupakan variabel khusus untuk menggambarkan frekuensi dari tiap kategori.

library(dplyr)
library(ggplot2)
plotdata <- Book1 %>%
  count(Merk)
ggplot(plotdata,
       aes(y = reorder(Merk,n),
           x = n)) +
  geom_bar(stat = "identity",
           fill = "Orange",
           color = "White") +
  theme_minimal()+
  labs(x = "Merk",
       y= "Variant",
       title = "Sorting Categories Hasil survey")

library(ggplot2)                                     # Untuk memvisualisasikan
ggplot(Marriage, 
   aes(x = zodiacs, 
       y = ..count.. / sum(..count..))) + 
  geom_bar(fill = rainbow(12), color= "aquamarine3") +     # Menerapkan warna
  theme_minimal() +                                  # menerapkan tema minimalis
  # Mengganti lebel dan judul
  labs(x = "Zodiak",                                 
       y = "Persen", 
  title  = "Peserta Pernikahan dalam Persen") +
  scale_y_continuous(labels = scales::percent)       # Menambah simbol persen (%)

Catatan : Warna dapat ditentukan dengan nama, misal col="red atau dengan trplet RGB heksadesimal, misal col= ##939AC0 juga dapat menggunakan dari package RColorBrewer. Pada kode di bawah ini, frekuensi dihitung secara jelas. Kemudian, fungsi reorder dapat digunakan untuk mengurutkan kategori berdasarkan jumlah atau frekuensinya. Opsi stat="identity" memberitahu fungsi plot/grafik untuk tidak menghitung atau menjumlahkan.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
plotdata <- Marriage %>%                             # Memuat dataset
 count(zodiacs)                                      # menghitung julmah peserta setiap `zodiak`
# gambar diagram batang dengan urutan meningkat
ggplot(plotdata,                                     
       aes(x = reorder(zodiacs, n), 
           y = n)) + 
  geom_bar(stat = "identity",
           fill = rainbow(12), 
           color= "#FFFFCC") +
   theme_minimal() +                                  # Menerapkan tema minimalis
  labs(x = "Zodiak", 
       y = "Frekuensi", 
  title  = "Sorting Categories")

library(dplyr)
library(ggplot2)
library(scales)
plotdata <- Book1%>%
  count(Merk)%>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
ggplot(plotdata,
       aes(x = reorder(Merk, -pct),
           y = pct)) +
  geom_bar(stat = "identity",
           fill = "Purple",
           color = "pink") +
  geom_text(aes(label = pctlabel),
            vjust = -0.25) +
  theme_minimal() +
  scale_y_continuous(labels = percent) +
  labs(x = "Merk",
       y = "Percent",
       title = "Labeling Bars Survey")

Pada diagram batang dapat diberi lebel nilai numerik pada tiap batangnya, dengan kode berikut.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
# Diagram batang dengan menampilkan persentase dan diurutkan secara menurun
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = "darkseagreen", 
          color = "darkorange1") +
  geom_text(aes(label = pctlabel), 
            vjust = -0.25) +
  theme_minimal() +                                  # Menerapkan tema minimal
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiak", 
       y = "Persen", 
       title  = "Persentase Zodiak Peserta Pernikahan")

Seringkali label kategori pada sumbu x tumpang tindih, oleh karena itu label dapat diputar pada derajat tertentu.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# Diagram batang dengan menampilkan persentase dan diurutkan secara menurun
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = "pink", 
           color = "blue") +
  geom_text(aes(label = pctlabel), 
            vjust = -0.25) +
  scale_y_continuous(labels = percent) +
  theme_minimal() +                                 
  labs(x = "Zodiak", 
       y = "Persen", 
       title  = "Persentase Zodiak Peserta Pernikahan")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))    # mengatur derajat label kategori variabel x

Agar label tidak tumpang tindih, terdapat cara lain yang dapat dilakukan yaitu dengan membalik sumbu x dan sumbu y dengan cara berikut.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# Diagram batang Persentase Zodiak Peserta Pernikahan dengan memutar sumbu x dengan sumbu y
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = rainbow(12), 
           color = "black") +
  geom_text(aes(label = pctlabel), 
            hjust = -0.10) +
  scale_y_continuous(labels = percent) +
  theme_minimal() +                               
  labs(x = "Zodiak", 
       y = "Persen", 
       title  = "Persentase Zodiak Peserta Pernikahan")+
  coord_flip()      # Memutar sumbu x dengan sumbu y

Diagram Pie

Diagram lingkaran adalah grafik statistik melingkar, yang dibagi menjadi beberapa bagian untuk menggambarkan proporsi numerik. Ini menggambarkan bagan khusus yang menggunakan “irisan pai”, di mana setiap sektor menunjukkan ukuran relatif data. Bagan lingkaran memotong dalam bentuk jari-jari menjadi segmen yang menggambarkan frekuensi atau besaran relatif juga dikenal sebagai grafik lingkaran.

Berikut merupakan contoh dari penggunaan “ggplot2” untuk diagram pai.

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

plotdata <- Book1%>%
  count(Merk)%>%
  arrange(desc(Merk))%>%
  mutate(prop = round(n*100/sum(n),1),
         lab.ypos = cumsum(prop) - 0.5*prop)

# Membuat diagram pai
mycols <- c("Pink", "Red","Green", "Grey")
ggplot(plotdata, aes(x = "", y = prop, fill = Merk)) +
  geom_bar(width = 1, stat = "identity", color = "White") +
  coord_polar("y", start = 0) +
  geom_text(aes(y = lab.ypos, label = prop), color = "Black") +
  scale_fill_manual(values = mycols) +
  theme_void() +
  labs(title = "Hasil Survey by Merk")

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
plotdata <- Marriage %>%
  count(race) %>%
  arrange(desc(race)) %>%
  mutate(prop = round(n*100/sum(n), 1),
         lab.ypos = cumsum(prop) - 0.5*prop)
# Membuat Diagram Pie
mycols <- c("red", "blue", "pink", "pink3")
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 = "black")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  labs(title = "Peserta Pernikahan Berdasarkan Ras")

Selain menggunakan diagram pie, juga dapat menggunakan diagram donat yang terdapat lubang di dalamnya. Untuk membuat lubang pada diagram donat menggunakan kode x=2 dan xlim=c(0.5,2.5). Selain itu, argumen width dalam fungsi geom_bar() tidak diperlukan.

library(ggplot2)                                     # Untuk visualisasi
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 = "black")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Berdasarkan Ras")

Diagram donat dengan tambahan label variabel

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# Memberi 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 = percent), color = "black")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Berdasarkan Ras")+
  theme(legend.position = "FALSE")

Peta Pohon

Pada peta pohon Anda bisa menangani variabel dengan kategorikal yang memiliki banyak tingkatan sekalipun.

library(ggplot2)                           # Untuk visualisasi
library(treemapify)                        # Visualisasi treemap
library(scales)                           # menentukan jeda atau label secara otomatis
plotdata<-Marriage%>%
  count(officialTitle)
ggplot(plotdata,
       aes(fill=officialTitle,
           area=n))+
  geom_treemap()+
  labs(title = "Marriage Participants by Officiate")

Untuk menambahkan label variabel pada treemap, kode yang digunakan sebagai berikut.

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

Variabel Kontinu

Distrubi variabel kuantitatif tunggal biasanya menggunakan plot histogram, plot densitas kernel, atau plot titik.

Histogram

Dengan menggunakan data set Marriage, maka akan dibuat histogram usia dari peserta pernikahan.

library(ggplot2)                           # Untuk visualisasi
ggplot(Marriage, aes(x=age))+
  geom_histogram(fill="azure4",
               color="purple",bins=20)+
  theme_minimal()+
  labs(title = "Peserta Pernikahan Berdasarkan Usia (Basic,menggunakan bin)",
       x="Usia",
       y="Frekuensi")

Sebagian besar peserta pernikahan berusia 20-an tahun. Kemudian berusia 40-an dan yang paling sedikit berusia 60-an tahun. Warna histogram dapat diubah dengan menggunakan 2 opsi : * fill : warna isi untuk batang *color : warna batas /garis batang

cara lainnya adalah dengan menggunakan binwidth, lebar batang akan disesuaikan dengan frekuensi/nilai dari binwidth. Seperti pada diagram batang, sumbu y mewakili frekuensi/ persenan.

library(ggplot2)                           # Untuk visualisasi
library(scales)                           # menentukan jeda atau label secara otomatis
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "turquoise3", 
                 color = "bisque2", 
                 binwidth = 5) +       #Menerapkan bindwidth
  theme_minimal() +                                  
  labs(title="Peserta Pernikahan Berdasarkan Usia (Menggunakan binwidth)", 
       y = "Persen",
       x = "Usia") +
  scale_y_continuous(labels = percent)

Plot Densitas Kernel

Density Plot memvisualisasikan distribusi data selama interval atau periode waktu yang berkelanjutan. Bagan ini adalah variasi dari Histogram yang menggunakan penghalusan kernel untuk memplot nilai, memungkinkan distribusi yang lebih halus dengan menghaluskan noise.

library(ggplot2)                           # Untuk visualisasi
ggplot(Marriage, aes(x=age))+
  geom_density(fill="seagreen")+
  theme_minimal()+
  labs(title = "Peserta Pernikahan Berdasarkan Usia",
       x="Usia",
       y="Density")

Grafik menunjukan distribusi dari nilai. Contoh, perbandingan kasusu antara usia 20 tahun dan 40 tahun akan diwakili oleh area di bawah kurfa antara 20 dan 4 pada sumbu x. Gunakan kode fill untuk menerapkan warna isi, dan color untuk warna batas.

Parameter Penghalusan (Smoothing)

library(ggplot2)                 # Untuk visualisasi
bw.nrd0 (Marriage$age)           # Default bandwidth untuk variabel usia
## [1] 5.181946
ggplot(Marriage, aes(x=age))+
  geom_density(fill="darksalmon",
               bw=1)+
  theme_minimal()+
  labs(title="Peserta Pernikahan Berdasarkan Usia",
       x="Usia",
       y="Density",
       subtitle="bandwidth = 1")

Grafik ini memungkinkan dengan mudah melihat kategori yang paling sering dan ralatif jarang. Namun sulit untuk menjelaskan arti/mendefinisikan sumbu y.

Diagram Titik

Diagram titik atau plot titik adalah diagram statistik yang terdiri dari titik-titik data yang diplot pada skala yang cukup sederhana, biasanya menggunakan lingkaran yang diisi. Ada dua versi grafik titik yang umum, namun sangat berbeda. Yang pertama telah digunakan dalam grafik yang digambar tangan (era pra-komputer) untuk menggambarkan distribusi kembali ke tahun 1884.[1] Versi lain dijelaskan oleh William S. Cleveland sebagai alternatif dari diagram batang, di mana titik digunakan untuk menggambarkan nilai kuantitatif (misalnya jumlah) yang terkait dengan variabel.

library(ggplot2)                 # Untuk visualisasi
ggplot(Marriage, aes(x=age))+
  # Mebuat grafik titik(dotplot)
  geom_dotplot(fill="thistle2",    # Menerapkan warna
               color="tan2",
               binwidth = 2) +
  theme_minimal()+
  labs(title = "Peserta Pernikahan By Usia",               # Menambahkan Judul
       y="Proportion",
       x="Usia")

Data Bivariat

data bivariat berhubungan dengan dua variabel yang dapat berubah dan dibandingkan untuk menemukan hubungan. Jika satu variabel mempengaruhi variabel lain, maka Anda akan memiliki data bivariat yang memiliki variabel bebas dan variabel terikat. Hal ini karena satu variabel tergantung pada yang lain untuk perubahan. Variabel bebas adalah suatu kondisi atau potongan data dalam suatu percobaan yang dapat dikontrol atau diubah. Variabel terikat adalah kondisi atau bagian data dalam percobaan yang dikendalikan atau dipengaruhi oleh faktor luar, paling sering variabel bebas.

Kategorikal Vs Kategorikal

Diagram Batang Bertumpuk

Berikut merupakan contoh grafik hubungan antara kelas mobil dan jenis penggerak (roda depan, roda belakang, atau 4 roda) untuk mobil dalam data set Fuel economy.

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

Diagram Batang yang Dikelompokkan

Untuk membuat plot batang yang berkelompok menggunakan “position =”single"

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

Diagram Batang Tersegmentasi

Diagram batang tersegmentasi merupakan lot batang yang bertumpuk dimana batang tersebut mewakili 100 persen.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
# Membuat data ringkasan dari dataset
plotdata <- mpg %>%
  group_by(class, drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
# Membuat diagram batang yang tersegmentasi
# Memberikan label pada tiap 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(name="orchid2") +
  theme_minimal() +                                
  labs(y = "Persen",
       fill = "Drive Train",
       x = "Kelas",
       title = "Penggerak Mobil berdasarkan Kelas") +
  theme_minimal()

Catatan : Gunakan opsi tambahan di bawah ini untuk meningkatkan pewarnaan dan pelabelan pada diagram.

  • factor Mengubah/mengatur urutan kategori untuk kelas variabel serta labels untuk variabel drive

  • scale_y_continuous Mengubah label tanda centang pada sumbu y

  • labs Mengubah/menambahkan judul dan label pada sumbu x dan y serta legenda

  • scale_fill_brewer Mengubah skema warna isian

  • theme_minimal Menghapus latar belakang abu-abu dan mengubah warna kisi

Plot Mosaik

Plot mosaik (juga dikenal sebagai diagram Marimekko) adalah metode grafis untuk memvisualisasikan data dari dua atau lebih variabel kualitatif.Ini adalah perluasan multidimensi dari spineplot, yang secara grafis menampilkan informasi yang sama hanya untuk satu variabel. Ini memberikan gambaran tentang data dan memungkinkan untuk mengenali hubungan antara variabel yang berbeda.

Selain membuat plot mosaik dengan ggplot2 Anda juga dapat membuatny menggunakan package “cvd”. Meskipun tidak akan membuat grafik ggplot2, package tersebut memberikan pendekatan yang lebih komprhensif untuk memvisualisasikan data kategorikal.

# 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 diagram mozaik
library(vcd)
mosaic(tbl, main = "Titanic Data")

data("HairEyeColor")
mosaic(HairEyeColor, shade = TRUE)

## Model warna rambut dan mata serta jenis kelamin. Mengindikasikan bahwa
## ada lebih banyak wanita berambut pirang bermata biru dari yang diperkirakan
## dalam kasus kemerdekaan (dan terlalu sedikit wanita berambut pirang bermata coklat).

Ukuran persegi sebanding dengan presentase khusus dalam kombinasi tingkat tersebut. Lebih banyak penumpang yang tewas daripada yang selamat. Berdasarkan grafik tersebut, penumpang laki-laki kelas 3 dan crew laki-laki yang paling banyak tidak selamat.

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, warna biru mewakilkan lebih banyak kasus dari yang diharapkan tidak terikat. Warna merah mewakili lebih sedikit asus 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")

Dapat dilihat bahwa jika class, gender, dan survival tidak terikat. Lebih banyak crew laki-laki yang tidak selamat, dan perempuan pada kelas 1,2, dan 3 lebih banyak yang selamat. Dan Penumpang kelas 1 yang tidak selamat jauh lebih sedikit.

Kontinu vs Kontinu

Plot sebaran(Scatterplot)

Plot sebar (juga disebut sebar, grafik sebar, bagan sebar, scattergram, atau diagram sebar) adalah jenis plot atau diagram matematika yang menggunakan koordinat Cartesian untuk menampilkan nilai-nilai biasanya dua variabel untuk satu set data. Jika poin dikodekan (warna/bentuk/ukuran), satu variabel tambahan dapat ditampilkan. Data ditampilkan sebagai kumpulan titik, masing-masing memiliki nilai satu variabel yang menentukan posisi pada sumbu horizontal dan nilai variabel lain yang menentukan posisi pada sumbu vertikal.

library(ggplot2)
             # Untuk visualisasi
library(hrbrthemes)                                # untuk `theme_ipsum()` dan legend
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="tomato", alpha=0.8) +
    theme_ipsum() +
    facet_wrap(~name, scale="free")

Cara yang paling mudah untuk menampilkan 2 variabel kuantitatif adalah scatterplot atau plot sebaran dengan tiap variabel diwakilkanoleh sumbu . Sebagai contoh, dengan menggunakan dataset Gaji untuk membuat plot sebaran dengan menampilkan variabel pengalaman (yrs.since.phd) vs gaji akademik (salary) dari Profesor perguruan tinggi. Install package carData terlebih dahulu.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
data(Salaries, package = "carData")
# Peningkatan plot sebaran
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color="lightyellow3", 
             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() +                               
  labs(x = "Tahun Sejak PhD",
       y = "",
       title = "Pengalaman vs. Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")

Notes: opsi geom_point bisa digunakan untuk mengubah

color : Mengubah warna titik size : Mengubah ukuran titik shape : Membuat bentuk titik alpha : Mengatur transparansi titik. Jarak transparansi mulai dari 0 (transparan) sampai 1 (buram) yang berguna ketika beberapa titik tumpang tindih.

Fungsi scale_x_continuous dan scale_y_continuous berfungsi untuk mengontrol penskalaan masing-masing pada sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat scatterplot yang lebih menarik.

Plot Sebaran Menyesuaikan Garis

Secara default, garis garis ini ditampilakn dengan batas kepercayaan 95%.Seringkali berguna untuk meringkas hubungan yang ditampilkan dalam plot sebaran dengan menggunakan sebuah garis yang menyesuaikan.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries,
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "steelblue2") +      # Menerapkan warna titik
  geom_smooth(method = "lm", color = "pink")+                              # Menerapkan warna pada garis
  theme_minimal() +                                 
  labs(x = "Years Since PhD",
       y = "",
       title = "Pengalaman vs Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")

Berdasarkan grafik di atas, gaji akan meningkat sesuai dengan pengalaman, namun ada penurunan di bagian ujung kanan-profesor dengan pengalaman signifikan, mendapatkan gaji yang lebih rendah. Garis lurus tidak menangkap efek non-linier ini, garis dengan lengkungan akan lebih pas

Garis regresi polinomial akann menampilkan garis yang pas dengan bentuknya. \[y=β_0+β_1x+β_2x^2+⋯+β_nx^2\] Biasanya digunakan garis kuadrat (\(^2\)) (satu lengkungan), atau kubik (\(^3\)) (dua lengkungan). Penggunaan polinomial orde tinggi (\(>3\)) jarang diperlukan. Menerapkan kesesuaian kuadrat data ke data Gaji menghasilkan scatterplot sebagai berikut.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries,
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "navajowhite") +    # Menerapkan warna titik
  geom_smooth(method = "lm", 
              formula = y ~ poly(x, 2), 
              color = "goldenrod3")+   # Menerapkan warna pada garis
  theme_minimal() +                                
  labs(x = "Years Since PhD",
       y = "",
       title = "Pengalaman vs Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")

Setelah garis diperhalus scatterplot menampilkan gambar yang lebih jelas dan mudah dipahami. Default di ggplot2 adalah garis loess yang memperhalus scatterplot scara lokal.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color="tan3", 
             size = 2, 
             alpha = 1) +
  geom_smooth(size = 1,
              color = "royalblue") +
  scale_y_continuous(label = scales::dollar, 
                     limits = c(50000, 250000)) +
  scale_x_continuous(breaks = seq(0, 60, 10), 
                     limits = c(0, 60)) +
  theme_minimal() +                                 
  labs(x = "Years Since PhD",
       y = "",
       title = "Pengalaman vs Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")

Kategorikal vs Kontinu

Diagram Batang (Ringkasan Statistik)

Selain untuk menampilkan jumlah kejadian berdasarkan kategorikal untuk variabel tunggal atau dua variabel. Ada juga bisa menggunakan diagram batang untuk menampilkan ringkasan statistik lainnya, seperti mean atau median. ada variabel kuantitatif untuk setiap tingkatan dari variabel kategorikal.

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

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
data(Salaries, package="carData")
# hitung rata-rata untuk setiap Jabatan
plotdata <- Salaries %>%
  group_by(rank) %>%
  dplyr::summarize(mean_salary = mean(salary))
# Membuat plot mean gaji dengan cara yg lebih menarik
mycols <- c("turquoise2", "tomato3", "salmon1")
ggplot(plotdata, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
                      y = mean_salary)) +
  geom_bar(stat = "identity", 
           fill = mycols) +
  geom_text(aes(label = dollar(mean_salary)), 
            vjust = -0.25) +
  scale_y_continuous(breaks = seq(0, 130000, 20000), 
                     label = dollar) +
  theme_minimal() +                               
  labs(title = "Rata-rata Gaji Berdasarkan Jabatan", 
       subtitle = "9 bulan gaji akademik untuk 2008-2009",
       x = "Jabatan",
       y = "Gaji")

Plot Densitas Kernel yang Dikelompokkan

Siapapun dapat membandingkan kelompok pada variabel numerik dengan melapiskan plot densitas kernel dalam satu grafik. Dibawah ini percobaan untuk polot distribusi gaji berdasarkan jabatan menggunakan plot densitas kernal.

ggplot(Salaries, 
       aes(x = salary, 
           fill = rank)) +
  geom_density(alpha = 0.4) +
  theme_minimal() +
  labs(title = "Distribusi Gaji Berdasarkan Jabatan",
       x = "Salary",
       y = "")

Opsi alpha membuat plot/grafik menjadi sebagian transparan sehingga dapat dilihat dengan jelas bagian yang tumpang tindih. Pada grafik tersebut dijelaskan bahwa, secara umum grafik akan meningkat sesuai dengan jabatan. Namun, kisaran gaji full profesor sangat luas.

Boxplot

plot kotak atau plot kotak adalah metode untuk menggambarkan kelompok data numerik secara grafis melalui kuartilnya. Plot kotak mungkin juga memiliki garis yang memanjang dari kotak (kumis) yang menunjukkan variabilitas di luar kuartil atas dan bawah. Pencilan dapat diplot sebagai titik individu. Plot kotak adalah non-parametrik: mereka menampilkan variasi dalam sampel populasi statistik tanpa membuat asumsi tentang distribusi statistik yang mendasarinya. Jarak antara bagian yang berbeda dari kotak menunjukkan tingkat dispersi (penyebaran) dan kemiringan dalam data, dan menunjukkan outlier. Selain titik itu sendiri, mereka memungkinkan seseorang untuk memperkirakan secara visual berbagai penduga L, terutama rentang interkuartil, midhinge, range, mid-range, dan trimean. Plot kotak dapat digambar secara horizontal atau vertikal. Plot kotak menerima nama mereka dari kotak di tengah, dan dari plot mereka.

ggplot(Salaries, aes(x = rank, 
                     y = salary)) +
  geom_boxplot(notch = TRUE, 
               fill = c("darkorchid2", "darkolivegreen1", "turquoise"), 
               alpha = .7) +
  theme_minimal() +
  labs(title = "Distribusi Gaji by Jabatan",
       x = "Jabatan",
       y = "Gaji")

Pada contoh di atas, 3 kelompok muncul pada posisi yang berbeda. Salah satu keuntungan dari boxpolt adalah lebar bentuk yang tidak biasanya memiliki arti. Hal ini dapat membandingkan distribusi dari banyak kelompok pada satu grafik. Jika dilihat pada boxplot bagian profesor memiliki ukuran yang cukup lebar, hal tersebut menujukan kemungkinan terdapat outlier di dalamnya.

Plot Biola

Plot biola adalah tampilan kompak dari distribusi berkelanjutan. Ini adalah campuran dari geom_boxplot() dan geom_density(): plot biola adalah plot kepadatan cermin yang ditampilkan dengan cara yang sama seperti plot kotak.

ggplot(Salaries, aes(x = rank,
                     y = salary)) +
  geom_violin(fill = "azure1") +
  geom_boxplot(width = .2, 
               fill = c("brown", "darkslategray2", "brown3"),
               outlier.color = "darkorchid1",
               outlier.size = 2) + 
  theme_minimal() +
  labs(title = "Distribusi Gaji Berdasarkan Jabatan")

Plot Garis Punggung

Plot garis punggung disebut juga plot kegembiraan menampilkkan distribuusi variabel kuantitatif untuk beberapa kelompok. Plot ini mirip dengan plot densitas kernel dari segi (faceting) vertikal, tetapi memakan lebih sedikit ruang. Plot garis punggung dibuat dengan package ggridges.

Menggunakan dataset Fuel economy, mari kita coba plot mil perjalanan kota pergalon menurut kelas mobil.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                                    # untuk menangani visualisasi yang bersamaan
ggplot(mpg, 
       aes(x = cty, 
           y = class, 
           fill = class)) +
  geom_density_ridges(alpha = 0.7) + 
  theme_ridges() +
  labs("Jarak dengan Kelas Otomatis") +
  theme(legend.position = "none")

Perhatikan kemungkinan tumpang tindih distribusi adalah lebih kepada grafik mobil compact. UNtuk mengubah transparansi grafik dapat menggunakan kod `geom_density_ridges (alpha=n), n berkisar 0-1.

Plot Garis

diagram garis adalah grafik yang menghubungkan serangkaian titik dengan menggambar segmen garis di antara mereka. Titik-titik ini diurutkan dalam salah satu nilai koordinatnya (biasanya koordinat x). Bagan garis biasanya digunakan dalam mengidentifikasi tren dalam data. Fungsi plot() di R digunakan untuk membuat grafik garis.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                         # untuk menangani visualisasi yang bersamaan
# Menghitung mean, standar deviasi, standar error, dan 95% interval kepercayaan berdasarkn 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))
# plot mean/standar error yang diperbarui
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 = "Ratarata Gaji by Jabatan dan Jenis Kelamin",
       subtitle = "(mean +/- standar error)",
       x = "", 
       y = "",
       color = "Jenis Kelamin")

Plot Strip

Plot strip adalah teknik analisis data grafis untuk meringkas kumpulan data univariat. Plot strip terdiri dari: Sumbu horizontal = nilai variabel respon; Sumbu vertikal = semua nilai disetel ke 1. Artinya, plot strip hanyalah plot dari nilai respons yang diurutkan di sepanjang satu sumbu.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
ggplot(Salaries, 
       aes(y = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           x = salary, 
           color = "darksalmon")) +
  geom_jitter(alpha = 0.7,
              size = 1.5) + 
  scale_x_continuous(label = dollar) +
  labs(title = "Gaji Akademik Berdasarkan Jabatan", 
       subtitle = "Gaji 9 bulan untuk 2008-2009",
       x = "Gaji",
       y = "Jabatan") +
  theme_minimal() +
  theme(legend.position = "none")

Opsi (legend.position = "none") digunakan untuk menyembunyikan legend ( hal yang tidak diperlukan. Jitter plot berkerja dengan baik jika jumlah dari titik-titik tidak terlalu besar).

Menggabungkan Jitter Plot dan Boxplot

  • Untuk boxplot: **size = 1** : untuk ketebalan garis **outlier.color = "black"** : membuat outlier berwarna hitam **outlier.shape = 2** : Bentuk outlier **outlier.size = 3** : menambah ukuran outlier

  • Untuk jitter plot: **alpha = 0.5** : untuk kejelasan titik (transparan atau tidak) **width = .2** : menurunkan nilai jitter (.4 adalah nilai jitter default)

Terakhir, sumbu x dan y kita putar posisi menggunakan fungsi coord_flip

ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           color = rank)) +
  geom_boxplot(size=1,
               outlier.shape = 2,
               outlier.color = "grey41",
               outlier.size  = 3) +
  geom_jitter(alpha = 0.5, 
              width=.2) + 
  scale_y_continuous(label = dollar) +
  labs(title = "Gaji Akademik by Jabatan", 
       subtitle = "Gaji 9 bulan 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none") +
  coord_flip()

Perhatikan fungsi geom_boxjitter yang tersedia dalam pacakage ggpol. Fungsi tersebut dapat membuat boxplot hibrida, boxplot setengah, dan scatterplot setengah.

library(ggpol)                                       # boxplot hibrid
ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           fill=rank)) +
  geom_boxjitter(color="burlywood2",
                 jitter.color = "gray",
                 errorbar.draw = TRUE) +
  scale_y_continuous(label = dollar) +
  labs(title = "Gaji Akademik by Jabatan", 
       subtitle = "Gaji 9 bulan 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none")

Plot Kawanan Lebah atau Beeswarm

Bee swarm plot adalah plot sebar satu dimensi yang mirip dengan stripchart, tetapi dengan berbagai metode untuk memisahkan titik-titik yang bertepatan sehingga setiap titik terlihat. Juga, beeswarm memperkenalkan fitur tambahan yang tidak tersedia di stripchart, seperti kemampuan untuk mengontrol. warna dan plot karakter setiap titik

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # menentukan jeda atau label secara otomatis
library(ggbeeswarm)                                  # package yang diperlukan untuk plot ini
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 = "Gaji Akademik Berdasarkan Jabatan", 
       subtitle = "Gaji 9 bulan untuk 2008-2009",
       x = "Jabatan",
       y = "Gaji") +
  theme_minimal() +
  theme(legend.position = "none")

Beeswarm Plot dibuat dengan fungsi geom_quasirandom. Beeswarm plot lebih mudah dipahami daripada jitter plot sederhana.

Diagram Titik Cleveland

Plot ini berguna untuk membandingkan data statistik numerikal untuk kelompok data besar. Sebagai contoh, Anda ingin membandingkan harapan hidup tahun 2007 dii Benua Asia menggunakan dataset pada gapminder.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Menentukan jeda atau label secara otomatis
library(ggbeeswarm)                                  # Mengurangi tumpang tindih pada grafik
library(gapminder)                                   # Untuk dataset `gapminder`
data(gapminder, package="gapminder")                 # memuat dataset `gapminder` 
# subset negara-negara di Asia 2007
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)
# Cleveland plot
ggplot(plotdata, 
       aes(x=lifeExp, 
           y=reorder(country, lifeExp))) +
  geom_point(color="darkolivegreen2", 
             size = 2) +
  geom_segment(aes(x = 40, 
               xend = lifeExp, 
               y = reorder(country, lifeExp), 
               yend = reorder(country, lifeExp)),
               color = "darkkhaki") +
  labs (x = "EKspetasi Hidup (tahun)",
        y = "",
        title = "Ekspetasi Hidup BY Negara",
        subtitle = "GapMinder data for Asia - 2007") +
  theme_minimal() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

Berdasarkan grafik di atas, Jepang memiliki angka harapan hidup yang paling tinggi, sedangkan Afghanistan memiliki angka harapan hidup paling rendah.

Data Multivariant

Data multivariat terdiri dari pengukuran individu yang diperoleh sebagai fungsi lebih dari dua variabel, misalnya, kinetika yang diukur pada banyak panjang gelombang dan sebagai fungsi suhu, atau sebagai fungsi pH, atau sebagai fungsi konsentrasi awal, dan seterusnya. sebagainya, dari solusi yang bereaksi.

Pengelompokan

Nilai dari dua variabel pertama dalam pengelompokkan dipetakan ke sumbu x dan y. Lalu variabel tambahan dipetakan ke karakteristik visual lainnya seperti warna, bentuk, ukuran, jenis garis, dan transparansi. Pengelompokkan memungkinkan untuk memplot data untuk beberapa grup dalam satu grafik. Dengan menggunakan data set “Salaries”, mari mencoba untuk menghuubungkan antara yrs.since.phd dan salary.

library(carData)                                     # untuk dataset
data(Salaries, package="carData")
ggplot(Salaries, aes(x = yrs.since.phd, 
                     y = salary, 
                     color=rank)) +
  geom_point() +
  theme_minimal() +
  labs(title = "Gaji Akademik Berdasarkan Pangkat dan Tahun Sejak Gelar",
       y = "Gaji",
       color = "Jabatan")

Kemudian, tambahkan jenis kelamin dengan menggunakan bentuk titik. Tingkatkan ukuran titik dan tambahkan tingkat transparansi untuk memperjelas grafik.

ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = rank, 
           shape = sex)) +
  geom_point(size = 3, alpha = .6) +
  theme_minimal() +
  labs(title = "Gaji Akademik Berdasarkan Jabatan, Jenis Kelamin, dan Tahun Sejak Gelar",
       y = "Gaji",
       color = "Jabatan",
       shape = "Jenis Kelamin")

Grafik di atas terlihat agak ribet dan mungkin sulit untuk membedakan jenis kelamin. Faceting mungkin menjadi solusi yang lebih baik.

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

Berikut ini merupakan contoh yang lebih jelas. Contoh grafik yang menggambarkan hubungan antara Tahun sejak . dan gaji dimana ukuran setiap titik bergantung dengan lamanya masa kerja. Ini disebut dengan bubble plot.

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 = "Gaji Akademik by Jabatan, Tahun Pelayanan, Since Degree",
       y = "Gaji",
       color = "Jabatan",
       size = "Tahun Jabatan")

Sangat jelas bahwa ada hubungan positif yang kuat antara tahun-tahun sejak Ph.D dan tahun layanan. tidak ditemukan batasan waktu yang sama antara Associate dan Full Professor. Bubble plot akan dijelaskan lebih detail di bab selanjutnya.

Sebagai contoh terakhir, gunakan variabel yrs.since.phd vs salary dan tambahkan jenis kelamin menggunakan warna dan quadratic best fit lines.

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 = "Tahun Sejak Ph.D.",
       title = "Gaji Akademik by Jenis Kelamin dan Tahun Pengalaman",
       subtitle = " Gaji 9 bulan 2008-2009",
       y = "",
       color = "Jenis Kelamin") +
  scale_y_continuous(label = scales::dollar) +
  scale_color_brewer(palette = "Set2") +
  theme_minimal()

Faceting

Dalam pengelompokkan memungkinkan untuk memplot beberpa variabe dalam satu grafik, menggunakan karakteristik viisual seerti warna, bentuk, dan ukuran. Sebuah grafik terdiri dari beberapa plot terpisah atau kelipatan keil, satu untuk setiap tingkatan dari variabel ketiga, atau kombinasi variabel.

ggplot(Salaries, aes(x = salary)) +
  geom_histogram(fill = "#caef66",
                 color = "black") +
  facet_wrap(~rank, ncol = 1) +
  theme_minimal() +
  labs(title = "Gaji Berdasarkan Jabatan",
       x = "Gaji",
       y = "")

Fungsi facet_wrap membuat grafik menjadi terpisah untuk tiap jabatan. Opsi ncol berfungsi untuk mengatur jumlah kolom. Contoh berikutnya menggunakan 2 variabel untuk mendefinisikan faset. Fungsi menetapkan jenis kelamin ke baris dan jabatan ke kolom, membuat matriks 6 plot dalam satu grafik.

ggplot(Salaries, aes(x = salary / 1000)) +
  geom_histogram(color = "black",
                 fill = "pink2") +
  facet_grid(sex ~ rank) +
  theme_minimal() +
  labs(title = "Diagram dari Gaji Berdasarkan Jenis Kelamin dan Jabatan",
       x = "Gaji ($1000)",
       y = "")

Juga dapat dibuat kombinasi pengelompokan dan faceting. Gunakan plot mean/SE dan faceting untuk membandingkan gaji profesor wanita dengan pria, dalam pangkat dan kedisiplinan. Terapkan warna untuk membedakan jenis kelamin dan faceting untuk membuat plot jabatan berdasarkan kombinasi kedisiplinan.

# Menghitung mean and standar error jenis kelamin, jabatan, and kedisiplinan
plotdata <- Salaries %>%
  group_by(sex, rank, discipline) %>%
  dplyr::summarize(n = n(),
            mean = mean(salary),
            sd = sd(salary),
            se = sd / sqrt(n))
# Menambahkan label pada kedisiplinan
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="Gaji Akademik 9 Bulan Berdasarkan Jenis Kelamin,Kedisiplinan, dan Jabatan",
       subtitle = "(Means and standar error)") +
  scale_color_brewer(palette="Set3")

Pernyatan facet_grid(. ~ rank + discipline)tidak menentukan variabel baris (.) dan kolom ditentukan oleh kombinasi jabatan dan kedisiplinan.

Fungsi theme() membuat tema hitam putih dan mengeliminasi garis kotak-kotak. Fungsi scale_color_brewer() mengubah skema warna setiap titik dan error bars.

Awalnya, tampaknya ada perbedaan jenis kelamin dalam gaji untuk associate dan full profesor di bidang teoretis. Saya mengatakan “mungkin” karena kita belum melakukan pengujian hipotesis formal (ANOVA dalam kasus ini).

Sebagai contoh terakhir, berikut contoh memplot data perubahan angka harapan hidup dari wkatu ke waktu di ngera Asia. Setiap negara muncul dalam facetnya sendiri. Fungsi theme dipakai untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkcil ukuran tulisan.

#Memplot angka harapan hidup berdasarkan tahun secara terpisah, untuk tiap negara di Asia
data(gapminder, package = "gapminder")

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

# buat plot harapan hidup tiap tahun, untuk setiap negara
ggplot(plotdata, aes(x=year, y = lifeExp)) +
  geom_line(color="hotpink1") +
  geom_point(color="darkseagreen3") +
  facet_wrap(~country) + 
  theme_minimal(base_size = 9) +
  theme(axis.text.x = element_text(angle = 45, 
                                   hjust = 1)) +
  labs(title = "Perubahan dalam Harapan Hidup",
       x = "Tahun",
       y = "Harapan Hidup")