Email:
RPubs: https://rpubs.com/datazerotohero/
Github: https://github.com/datazerotohero/


Data visualization adalah teknik mendapatkan informasi dari data ke konteks visual, seperti bagan, grafik, dan peta. Data Visualisasi memungkinkan untuk mengatasi data yang kecil bahkan data besar menjadi lebih mudah untuk otak manusia dimengerti, dan visualisasi juga membuatnya lebih baik untuk mendeteksi pola, trend, dan pencilan dalam kelompok data.

R adalah platform yang bagus untuk analisis data, bisa untuk membuat hampir semua macam tipe grafik. Buku ini dapat membantumu untuk membuat visualisasi paling populer - dari cepat dan plot kasar untuk publikasi - grafik yang siap. disini kita akan belajar bagaimana untuk memvisualisasi data dari univariate, bivariate dan multivariate. Dari yang paling dasar ke menengah, silahkan ikuti instruksi dibawah ini langkah demi langkah.

1 Data Univariate

Plot Univariate biasanya digunakan untuk menjalanlan distribusi data dari satu variabel. Variabelnya dapat berupa kategorikal (e.g., Jenis Kelamin, ras, negara, kota, dsb) atau kuantitatif (e.g., umur, berat, inflasi, skala, dsb).

1.1 Kategorikal

Distribusi data dari satu variabel plotnya bersifat bar-chart, pie-chart, atau (jarang) treemap.

1.1.1 Grafik batang/Bar-Chart

Berikut adalah contoh Marriage dataset, I collect from package mosaicData.Kita gunakan grafik batang untuk menampilkan distribusi pendatang pernikahan berdasarkan Zodiac

library(ggplot2)                                     # untuk visualisasi
setwd("C:/Users/USER/Documents/SEMESTER 3/ALGORITMA/WEEK 13 VISUALIZATION/")                    # jangan lupa mengatur direktori kerja
Marriage<- read.csv("Data/Marriage.csv")             # muat data dari PC
ggplot(Marriage, aes(x = zodiacs)) +                 # Plot distribusi dari `Zodiac`
  geom_bar(fill = "burlywood",color= "azure4")+ # kamu bisa memodifikas warnanya 
  theme_minimal() +                                  # Gunakan teman minimal
  labs(x = "Zodiacs",                                # kamu bisa memodifikasi plot dan labelnya
       y = "Frekuensi",
       title = "Peserta Pernikahan Berdasarkan Zodiak")         
Categorical Bar Chart 1

Categorical Bar Chart 1

Batang dapat mewakilkan persen dibanding jumlah. untuk grafik batang (Zodiac), kode aes(x=sign) merupakan jalan pintas untuk aes(x = sign, y = ..count..), dimana ..count.. adalah variabel spesial untuk mewakilkan frekunesi dalam setiap kategroi. kamu bisa mneggunakan ini untuk menghitung persentase, dengan variabel eksplisit y.

Dalam R, warna dapat ditentukan bersadarkan nama (e.g col = “red”) seperti yang dapat kamu lihat digambar berikut.

atau bisa juga dengan menetapkan warna dengan menggunakan triplet RGB heksadesimal (sepert col = “#FFCC00”) lebih. Bahkan, kamu juga dapat menggunakan warna lain dari sistem seperti yang diambil dari salah satu pada paket RColorBrewer
Lebih dan paketnya grDevices (kamu mungkin sudah memuatnya) berisi sejumlah palet, ketik ? rainbow di Rconsole kamu. Mari pertimbangkan grafik berikut:

library(ggplot2)                                     # Visualisasi
ggplot(Marriage, 
   aes(x = zodiacs, 
       y = ..count.. / sum(..count..))) + 
  geom_bar(fill = rainbow(12), color= "azure4") +
  theme_minimal() +                                  # gunakan tema minimal
  labs(x = "Zodiak",
       y = "Persen",
  title = "Peserta Pernikahan dalam Persen") +
  scale_y_continuous(labels = scales::percent)       # tambahkan simnol % pada garis y  
 Categorical Bar Chart 2

Categorical Bar Chart 2

Mengurutkan batang menurut frekuensi sering kali dapat membantu. Pada kode di bawah ini, frekuensi dihitung secara eksplisit. Kemudian fungsi reorder digunakan untuk mengurutkan kategori berdasarkan frekuensi. Opsi stat ="identity" memberi tahu fungsi plotting untuk tidak menghitung jumlah, karena mereka diberikan secara langsung.

library(dplyr)                                       # manipulasi data
library(ggplot2)                                     # visualisasi
plotdata <- Marriage %>%                             # memuat dataset
 count(zodiacs)                                      # menghitung pastisipan setiap zodiac
# plot menurun
ggplot(plotdata,                                     
       aes(x = reorder(zodiacs, n), 
           y = n)) + 
  geom_bar(stat = "identity",
           fill = rainbow(12), 
           color= "azure4") +
   theme_minimal() +                                  # gunakan tema minimal
  labs(x = "Zodiak",
       y = "Frekuensi",
       title = "Menyortir Kategori")
Categorical Bar Chart 3

Categorical Bar Chart 3

Jika ingin memberi label pada setiap batang dengan nilai numeriknya, periksa kode berikut:

library(dplyr)                                       # Manipulasi data
library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
# plot batang sebagai persen dalam menurun dnegan 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() +                                  # gunakan tema minimal
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiak",
       y = "Persen",
       title = "Batang Pelabelan")
Categorical Bar Chart 4

Categorical Bar Chart 4

Terkadang label kategori mungkin tumpang tindih, itu sangat mengganggu bukan ?. Jadi, kamu dapat memutar label sumbu.

library(ggplot2)                                     # Visualisasi
library(scales)                                      # otomatis menentukan break/labels
# plot batang dengan persen
# 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() +                                  #gunakan tema minimal
  labs(x = "Zodiak",
       y = "Persen",
       title = "Label yang Tumpang Tindih")+
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Categorical Bar Chart 5

Categorical Bar Chart 5

atau, dapat juga menangani situasi ini dengan membalikkan sumbu x dan y.

library(ggplot2)                                     # visualisasi
library(scales)                                      # otomotatis menentukan break/label 
# plot batang dengan persen
# 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() +                                  # gunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Overlapping Labels")+
  coord_flip()
Categorical Bar Chart 6

Categorical Bar Chart 6

1.1.2 Grafik pai

Diagram lingkaran kontroversial dalam statistik. Jika tujuanmu adalah membandingkan frekuensi kategori, lebih baik Anda menggunakan diagram batang (manusia lebih baik dalam menilai panjang batang daripada volume irisan pai). Jika tujuanmu adalah membandingkan setiap kategori dengan keseluruhan (misalnya, berapa bagian peserta yang merupakan Hispanik dibandingkan dengan semua peserta), dan jumlah kategorinya kecil, maka diagram lingkaran mungkin cocok untukmu. Dibutuhkan lebih banyak kode untuk membuat diagram lingkaran yang menarik di R.

Ini adalah contoh untuk membuat diagram lingkaran ggplot2 dasar:

library(dplyr)                                       # Manipulasi data
library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels
# 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 pai
mycols <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(plotdata, aes(x = "", y = prop, fill = race)) +
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y", start = 0)+
  geom_text(aes(y = lab.ypos, label = prop), color = "white")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  labs(title = "Marriage Participants by Race")
Categorical Pie Chart

Categorical Pie Chart

Grafik donat hanyalah grafik pai sederhana dengan lubang di dalamnya. Satu-satunya perbedaan antara kode diagram lingkaran adalah kita menetapkan: x=2 danxlim=c(0,5, 2.5) untuk membuat lubang di dalam diagram lingkaran. Selain itu, argumen lebar dalam fungsigeom_bar()tidak lagi diperlukan.

library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels
# 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 menjadi berangan-angan dan menambahkan label, sambil menghilangkan legenda

library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels breaks/labels
# tambahkan label %
plotdata$percent <- paste0(plotdata$race, "\n",
                         round(plotdata$prop), "%")
# Grafik donat dengan %
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 = "Peserta pernikahan menurut ras")
Categorical Donut Chart 2

Categorical Donut Chart 2

  #theme(legend.position = "FALSE")

1.1.3 Peta Pohon

Alternatif untuk diagram lingkaran adalah peta hierarki. Tidak seperti diagram lingkaran, diagram ini dapat menangani variabel kategori yang memiliki banyak tingkatan.

library(ggplot2)                                     # visualisasi
library(treemapify)                                  # visualisasi
library(scales)                                      # otomatis menentukan break/labels
plotdata <- Marriage %>%
  count(officialTitle)
ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n)) +
  geom_treemap() + 
  labs(title = "Partisipan Pernikahan oleh Pejabat")
Categorical Tree Map 1

Categorical Tree Map 1

berikut adalah versi yang lbih berguna dengan label

ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n, 
           label = officialTitle)) +
  geom_treemap() + 
  geom_treemap_text(colour = "white", 
                    place = "centre") +
  labs(title = "Partisipan Pernikahan oleh Pejabat") +
  theme(legend.position = "none")
Categorical Tree Map 2

Categorical Tree Map 2

1.2 Continuous/Berkelanjutan

Distribusi variabel kuantitatif tunggal biasanya diplot dengan histogram, kernel density plot, or plot titik

1.2.1 Histogram

menggunakan data marriage, mari plot umur dari partisipan wedding

library(ggplot2)                                     # visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_histogram(fill = "salmon1", 
                 color = "white",bins = 20) + 
  theme_minimal() +                                  # gunakan tema minimal
  labs(title="Peserta Pernikahan berdasarkan usia (Dasar)",
       x = "usia")
Quantitative Histogram

Quantitative Histogram

Sebagian besar peserta tampaknya berusia awal 20-an dengan kelompok lain berusia 40-an, dan kelompok yang jauh lebih kecil berusia enam puluhan dan awal tujuh puluhan. Ini akan menjadi distribusi multimoda. Warna histogram dapat dimodifikasi menggunakan dua opsi: * fill - mengisi warna pada batang * color - warna pembatas di sekeliling batang

Atau kamu dapat menentukannya dengan binwidth, lebar tempat sampah yang diwakili oleh jeruji.

library(ggplot2)                                     # visualisasi
library(scales)                                      #  otomatis menentukan break/labels 
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "salmon1", 
                 color = "white", 
                 binwidth = 5) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title="Peserta Pernikahan berdasarkan usia (Tempat Sampah dan Bandwidth Alternatif)", 
       y = "persen",
       x = "usia") +
  scale_y_continuous(labels = percent)
Quantitative Histogram 2

Quantitative Histogram 2

Seperti grafik batang, sumbu y dapat mewakili hitungan atau persen dari total.

library(ggplot2)                                     # visualisasi
library(scales)                                      #  otomatis menentukan break/labels 
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "salmon1", 
                 color = "white", 
                 binwidth = 5) +
  theme_minimal() +                                  # gunakan tema minimal
  labs(title="Peserta Pernikahan berdasarkan usia (Persen) ",
       y = "Persen",
       x = "Umur") +
  scale_y_continuous(labels = percent)
Quantitative Histogram 3

Quantitative Histogram 3

1.2.2 Kernel Density Plot

Alternatif untuk histogram adalah plot kepadatan kernel. Secara teknis, estimasi kepadatan kernel adalah metode non-parametrik untuk memperkirakan fungsi kepadatan probabilitas dari variabel acak kontinu. (Apa ??) Pada dasarnya, kami mencoba menggambar histogram yang dihaluskan, di mana area di bawah kurva sama dengan satu.

library(ggplot2)                                     # visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "indianred3") +
  theme_minimal() +                                  # gunakan tema minimal
  labs(title = "Peserta Pernikahan Berdasarkan Umur")
Quantitative Kenel Density Plot

Quantitative Kenel Density Plot

Grafik menunjukkan distribusi skor. Misalnya, proporsi kasus antara 20 dan 40 tahun akan diwakili oleh area di bawah kurva antara 20 dan 40 pada sumbu x. Seperti bagan sebelumnya, kita juga dapat menggunakan isian dan warna untuk menentukan warna isian dan batas.

1.2.3 Smoothing Parameter

Tingkat kehalusan dikontrol oleh parameter bandwidth bw. Untuk menemukan nilai default untuk variabel tertentu, gunakan fungsi bw.nrd0. Nilai yang lebih besar akan menghasilkan pemulusan yang lebih banyak, sedangkan nilai yang lebih kecil akan menghasilkan pemulusan yang lebih sedikit.

library(ggplot2)                                     # visualisasi
bw.nrd0(Marriage$age)                                # bandwidth default untuk variabel usia
## [1] 5.181946
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "deepskyblue", 
               bw = 1) +
  theme_minimal() +                                  # gunakan tema minimal
  labs(title = "Peserta berdasarkan usia",
       subtitle = "bandwidth = 1")
Smoothing Parameter Plot

Smoothing Parameter Plot

Plot kepadatan kernel memungkinkan Anda dengan mudah melihat skor mana yang paling sering dan mana yang relatif jarang. Namun sulit untuk menjelaskan arti sumbu y kepada seorang non-ahli statistik. (Tapi itu akan membuatmu terlihat sangat pintar di pesta!)

1.2.4 Grafik titik

Alternatif lain untuk histogram adalah grafik titik. Sekali lagi, variabel kuantitatif dibagi menjadi beberapa kelompok, tetapi bukannya batang ringkasan, setiap pengamatan diwakili oleh sebuah titik. Secara default, lebar sebuah titik sama dengan lebar bin, dan titik-titik bertumpuk, dengan setiap titik mewakili satu observasi. Ini bekerja paling baik jika jumlah observasi kecil (katakanlah, kurang dari 150). Opsi isian dan warna dapat digunakan untuk menentukan warna isian dan batas masing-masing titik

library(ggplot2)                                     # visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_dotplot(fill = "gold", 
               color = "azure4",
               binwidth = 2) +
  theme_minimal() +                                  # tema minimal
  labs(title = "Peserta berdasarkan usia",
       y = "Proportion",
       x = "Age")
Dot Chart

Dot Chart

ada banyak pilihan yang tersedia. klik here untuk lebih detail.

2 Data Bivariate

Grafik bivariat menampilkan hubungan antara dua variabel. Jenis grafik akan tergantung pada tingkat pengukuran variabel (kategorikal atau kuantitatif)

2.1 Kategorikal vs. Kategorikal

2.1.1 Grafik batang bertumpuk

Mari kita plot hubungan antara kelas mobil dan jenis penggerak (roda depan, roda belakang, atau penggerak 4 roda) untuk mobil di Fuel economy dataset.

library(ggplot2)                                     # visualisasi
mpg$drv<-factor(mpg$drv, 
                levels = c("f", "r", "4"),
                labels = c("front-wheel", "rear-wheel", "4-wheel"))
# stacked bar chart
ggplot(mpg, 
       aes(x = class, 
           fill = drv)) + 
  geom_bar(position = "fill") +
  theme_minimal() +                                  #tema minimal
  labs(y = "Proportion")
Stacked Bar Chart

Stacked Bar Chart

2.1.2 Grafik batang berkelompok

Bagan batang yang dikelompokkan menempatkan batang untuk variabel kategori kedua secara berdampingan. Untuk membuat plot batang yang dikelompokkan, gunakan opsi position =" single ". Perhatikan bahwa opsi ini hanya tersedia di versi pengembangan terbaru ggplot2, tetapi akan segera tersedia secara umum.

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

Grouped Bar Chart

2.1.3 grafik batang memotong

Plot batang tersegmentasi adalah plot batang bertumpuk di mana setiap batang mewakili 100 persen. kamu dapat membuat diagram batang tersegmentasi menggunakan opsi posisi = “terisi”. Jenis plot ini sangat berguna jika tujuannya adalah untuk membandingkan persentase kategori dalam satu variabel di setiap tingkat variabel lain. Misalnya, proporsi mobil penggerak roda depan meningkat saat kamu beralih dari kompak, ke menengah, ke minivan.

library(dplyr)                                       # Manipulasi data
library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels
# buat summary data (Data manipulasi)
plotdata <- mpg %>%
  group_by(class, drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
# buat grafik batang bertumpuk
# tambahkan label disetiap bagian
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() +                                  # gunakan tema minimal
  labs(y = "Persen",
       fill = "Drive Train",
       x = "Kelas",
       title = "Penggerak Mobil menurut Kelas") +
  theme_minimal()
Segmented Bar Chart

Segmented Bar Chart

Catatan: Kamu dapat menggunakan opsi tambahan untuk meningkatkan warna dan pelabelan. Pada grafik di bawah ini

  • factor mengubah urutan kategori untuk variabel kelas dan urutan serta * label untuk variabel drive
  • scale_y_continuous mengubah label tanda centang sumbu y
  • labs menyediakan judul dan mengubah label untuk sumbu x dan y serta legenda
  • scale_fill_brewer mengubah skema warna isian
  • theme_minimal menghapus latar belakang abu-abu dan mengubah warna kisi

Fungsi lainnya dibahas lebih lengkap pada bagian pada Bab Visualisasi Data Lanjutan.

2.1.4 Mosaik Plot

Bagan mosaik dapat menampilkan hubungan antara variabel kategori menggunakan persegi panjang yang luasnya mewakili proporsi kasus untuk kombinasi level tertentu. Warna ubin juga dapat menunjukkan hubungan derajat antar variabel.

Meskipun bagan mosaik dapat dibuat dengan ggplot2 menggunakan ggmosaic paket, saya sarankan menggunakan paket vcd sebagai gantinya. Meskipun tidak akan membuat grafik ggplot2, paket memberikan pendekatan yang lebih komprehensif untuk memvisualisasikan data kategorikal.

Orang-orang terpesona dengan Titanic (atau apakah dengan Leo?). Dalam bencana Titanic , peran apa yang dimainkan seks dan kelas dalam bertahan hidup? Kita dapat memvisualisasikan hubungan antara ketiga variabel kategori ini dengan menggunakan kode di bawah ini.

# buat 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
# buat plot mosaik dari tabel
library(vcd)
## Loading required package: grid
mosaic(tbl, main = "Titanic data")
Basic mosaic plot

Basic mosaic plot

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

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

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 kelangsungan hidup independen, kita melihat lebih banyak awak laki-laki yang tewas, dan perempuan kelas 1, 2 dan 3 selamat daripada yang diharapkan. Sebaliknya, jauh lebih sedikit penumpang kelas satu (pria dan wanita) yang meninggal daripada yang diperkirakan secara kebetulan. Dengan demikian asumsi kemerdekaan ditolak. (Peringatan spoiler: Leo tidak berhasil.)

2.2 kontinu vs. kontinu

Hubungan antara dua variabel kuantitatif biasanya ditampilkan menggunakan diagram sebar dan grafik garis.

2.2.1 Scatterplot

Scatterplot dibuat untuk mempelajari hubungan antara 2 variabel. Sehingga seringkali disertai dengan perhitungan koefisien korelasi, yang biasanya mencoba mengukur hubungan linier. Namun jenis hubungan lain dapat dideteksi menggunakan sebar, dan tugas umum terdiri untuk menyesuaikan model yang menjelaskan Y dalam fungsi X. Berikut adalah beberapa pola yang dapat Anda deteksi dengan melakukan sebar

library(ggplot2)                                   # visualisasi
library(hrbrthemes)                                # untuk  `theme_ipsum()` and legenda
# buat 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

Tampilan paling sederhana dari dua variabel kuantitatif adalah sebar, dengan setiap variabel diwakili pada sumbu. Misalnya, dengan menggunakan kumpulan data Gaji, kita dapat memplot pengalaman (yrs.since.phd) vs. gaji akademik (gaji) untuk college Professors.

library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/label
data(Salaries, package="carData")
# meningkatkan scatter plot
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() +                                  # gunakan tema minimal
  labs(x = "Tahun Sejak PhD",
       y = "",
       title = "Pengalaman vs. Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")
Scatterplot 1

Scatterplot 1

Notes: geom_point dapat digunakan untuk mengubah

  • color - warna titik
  • size - ukuran titik
  • shape - bentuk titik
  • alpha - transparansi titik. Transparansi berkisar dari 0 (transparan) hingga 1 (buram), dan merupakan parameter yang berguna saat titik tumpang tindih

Fungsi scale_x_continuous danscale_y_continuous mengontrol penskalaan masing-masing pada sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat plot sebar yang lebih menarik.

2.2.2 Scatterplot Fit Lines/ Garis kecocokan

Seringkali berguna untuk meringkas hubungan yang ditampilkan di sebar, menggunakan garis yang paling pas. Banyak jenis garis yang didukung, termasuk linier, polinomial, dan nonparametrik (loess). Secara default, batas kepercayaan 95% untuk garis-garis ini ditampilkan.

library(ggplot2)                                     # Visualisasi
ggplot(Salaries,
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "cornflowerblue") +
  geom_smooth(method = "lm", color = "brown1")+
  theme_minimal() +                                  # gunakan tema minimal
  labs(x = "Tahun Sejak PhD",
       y = "",
       title = "Pengalaman vs. Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")
Scatterplot Linear

Scatterplot Linear

Jelas, gaji meningkat dengan pengalaman. Namun, tampaknya ada penurunan di ujung kanan - profesor dengan pengalaman signifikan, mendapatkan gaji lebih rendah. Garis lurus tidak menangkap efek non-linier ini. Garis dengan lengkungan akan lebih pas di sini.

Garis regresi polinomial memberikan garis fit dari formulir

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

Biasanya garis kuadrat (satu tikungan), atau kubik (dua tikungan) digunakan. Sangat jarang perlu menggunakan urutan yang lebih tinggi $ (> 3) $ polynomials. Menerapkan kesesuaian kuadrat ke set data gaji menghasilkan hasil sebagai berikut.

library(ggplot2)                                     # 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() +                                  #tema minimal
  labs(x = "Tahun Sejak PhD",
       y = "",
       title = "Pengalaman vs. Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009")
Scatterplot Quadratic

Scatterplot Quadratic

Akhirnya, garis kesesuaian nonparametrik yang diperhalus sering kali dapat memberikan gambaran yang baik tentang hubungan tersebut. Default di ggplot2 adalah garis loess yang merupakan singkatan dari penghalusan sebar berbobot lokal.

library(ggplot2)                                     # 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() +                                  #tema minimal
  labs(x = "Tahun Sejak PhD",
       y = "",
       title = "Pengalaman vs. Gaji",
       subtitle = "Gaji 9 bulan untuk 2008-2009") +
  theme_minimal()
Scatterplot Smoothed Nonparametric

Scatterplot Smoothed Nonparametric

2.3 Kategorikal vs. kontinu

Saat memplot hubungan antara variabel kategori dan variabel kuantitatif, tersedia banyak jenis grafik. Ini termasuk diagram batang yang menggunakan statistik ringkasan, plot kepadatan kernel yang dikelompokkan, plot kotak berdampingan, plot biola berdampingan, plot mean / sem, plot ridgeline, dan plot Cleveland.

2.3.1 Grafik Batang

Di bagian sebelumnya, diagram batang digunakan untuk menampilkan jumlah kasus berdasarkan kategori untuk satu variabel atau untuk dua variabel. Anda juga dapat menggunakan diagram batang untuk menampilkan statistik ringkasan lainnya (misalnya, rata-rata atau median) pada variabel kuantitatif untuk setiap tingkat variabel kategori.

Misalnya, grafik berikut menampilkan gaji rata-rata untuk sampel profesor universitas menurut peringkat akademis mereka.

library(dplyr)                                       # Manipulasi data
library(ggplot2)                                     # visualisasi
library(scales)                                      # otomatis menentukan break/labels
data(Salaries, package="carData")
# hitung gaji rataan untuk setiap tingkatan
plotdata <- Salaries %>%
  group_by(rank) %>%
  dplyr::summarize(mean_salary = mean(salary))
# plot gaji rataan dalam gaya 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() +                                  # gunakan tema minimal
  labs(title = "Rataan gaji berdasarkan pangkat", 
       subtitle = "9 buln akademik gaji untuk 2008-2009",
       x = "",
       y = "")
Bar Chart (Summary statistics)

Bar Chart (Summary statistics)

2.3.2 Kelompok Kernel Density Plot

Seseorang dapat membandingkan grup pada variabel numerik dengan melapiskan kernel density plot dalam satu grafik. Mari kita plot distribusi gaji dengan peringkat menggunakan plot kepadatan kernel.

ggplot(Salaries, 
       aes(x = salary, 
           fill = rank)) +
  geom_density(alpha = 0.4) +
  theme_minimal() +
  labs(title = "Distribusi gaji berdasarkan tingkatan")
Grouped Kernel Density Plots

Grouped Kernel Density Plots

Pilihan alpha membuat plot kepadatan transparan sebagian sehingga kita dapat melihat apa yang terjadi di bawah tumpang tindih. Nilai alfa berkisar dari 0 (transparan) hingga 1 (buram). Grafik tersebut menjelaskan bahwa, secara umum, gaji naik sesuai pangkat. Namun, kisaran gaji untuk profesor penuh sangat luas.

2.3.3 Kotak Plot

box-plot menampilkan $ 25 ^ {th} $ persentil, median, dan $ 75 ^ {th} $ persentil dari sebuah distribusi. Kumis (garis vertikal) menangkap sekitar 99% dari distribusi normal, dan pengamatan di luar rentang ini diplot sebagai titik yang mewakili pencilan (lihat gambar di bawah)

Box Plots

Box Plots

Plot kotak berdampingan sangat berguna untuk membandingkan kelompok (yaitu, level variabel kategori) pada variabel numerik. Mari kita plot distribusi gaji dengan peringkat menggunakan plot kotak. Plot kotak bertakik memberikan metode perkiraan untuk memvisualisasikan apakah kelompok berbeda. Meskipun bukan tes formal, jika takik dari dua petak kotak tidak tumpang tindih, ada bukti kuat (kepercayaan 95%) bahwa median dari kedua kelompok berbeda.

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

Box Plots

Dalam contoh di atas, ketiga kelompok tersebut tampak berbeda. Salah satu keuntungan dari plot kotak adalah lebarnya biasanya tidak berarti. Ini memungkinkan kamu membandingkan distribusi banyak grup dalam satu grafik.

2.3.4 Plot biola

Plot biola hamppir sama dengan plot kernel density tetapi dicerminkan dan diputar $ 90 ^ 0 $. Mari kita plot distribusi gaji dengan peringkat menggunakan plot biola.

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

Violin Plots

2.3.5 Plot Ridgeline

Plot ridgeline (juga disebut plot kegembiraan) menampilkan distribusi variabel kuantitatif untuk beberapa kelompok. Mereka mirip dengan plot kernel density dengan vertikal faceting, tetapi mengambil lebih sedikit ruang. Plot ridgeline dibuat dengan paket ggridges.

mennggunakan data Fuel economy , mari kita plot distribusi mil mengemudi kota per galon dengan kelas mobil.

library(dplyr)                                       # manipulasi
library(ggplot2)                                     # visualisasi
library(ggridges)                                    # untuk menangani visulisasi yang tumpang tindih
ggplot(mpg, 
       aes(x = cty, 
           y = class, 
           fill = class)) +
  geom_density_ridges(alpha = 0.7) + 
  theme_ridges() +
  labs("Highway mileage by auto class") +
  theme(legend.position = "none")
Ridgeline Plots

Ridgeline Plots

Saya telah menyembunyikan legenda di sini karena itu berlebihan (distribusinya sudah diberi label pada sumbu y). Tidak mengherankan, truk pikap memiliki jarak tempuh yang paling rendah, sementara subkompak dan mobil kompak cenderung mencapai peringkat. Namun, ada rentang skor jarak tempuh yang sangat luas untuk mobil-mobil kecil ini.

Perhatikan kemungkinan tumpang tindih distribusi adalah trade-off untuk grafik yang lebih kompak. Anda dapat menambahkan transparansi jika tumpang tindih parah menggunakan geom_density_ridges (alpha = n), dengan n berkisar dari 0 (transparan) hingga 1 (buram). lihat package vingnette untuk lebih detail.

2.3.6 Plot garis

Metode populer untuk membandingkan grup pada variabel numerik adalah plot rata-rata dengan bilah kesalahan. Error bar dapat mewakili deviasi standar, error standar mean, atau interval kepercayaan. Di bagian ini, kami akan memplot cara dan kesalahan standar. Kita dapat menggunakan teknik yang sama untuk membandingkan gaji berdasarkan pangkat dan jenis kelamin. (Secara teknis, ini bukan bivariat karena kami merencanakan pangkat, jenis kelamin, dan gaji, tetapi tampaknya cocok di sini).

library(dplyr)                                       # manipulasi
library(ggplot2)                                     # visualisasi
library(ggridges)                                    # untuk menangani visulisasi yang tumpang tindih
# menghitung rataa, standar deviasi,
# standar error, kepercayaan 95% 
# interval berdasarkan pangkat
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))
# memperbiaki rataan/standar error 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 Plot Keping

Hubungan antara variabel pengelompokan dan variabel numerik dapat ditampilkan dengan plot pencar. Misalnya, plot distribusi gaji menurut peringkat menggunakan plot strip. Plot sebar satu dimensi ini disebut plot strip. Sayangnya, pencetakan poin yang berlebihan membuat interpretasi menjadi sulit. Hubungannya lebih mudah dilihat jika titik-titiknya goyah. Pada dasarnya nomor acak kecil ditambahkan ke setiap koordinat y. Juga lebih mudah untuk membandingkan kelompok jika kita menggunakan warna.

library(ggplot2)                                     # visualisasi
library(scales)                                      # infrastruktur penskalaan
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 menyembunyikan legenda (yang tidak diperlukan di sini). Plot jittered bekerja dengan baik jika jumlah poin tidak terlalu besar.

2.3.8 Jitter and Boxplots

Mungkin lebih mudah untuk memvisualisasikan distribusi jika kita menambahkan plot kotak ke plot jitter. Beberapa opsi ditambahkan untuk membuat plot ini.

  • untuk boxplot:
    • size = 1 membuat garis lebih tebal
    • outlier.color = "black" membuat tepi hitam
    • outlier.shape = 1 menentukan lingkaran untuk tepi
    • outlier.size = 3 menaikkan ukuran tepi
  • untuk jitter:
    • alpha = 0.5 membuat titik transparan
    • width = .2 mengurngi jumlah jitter (.4 errornya)

Finally, sumbu $ x $ dan $ y $ dihormati menggunakan fungsi coord_flip (yaitu, grafik diputar pada sisinya).

library(ggplot2)                                     # visualisasi
library(scales)                                      # infrastruktur penskalaan
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 = "Gaji akademik berdasarkan pangkat", 
       subtitle = "9 bulan gaji untuk 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none") +
  coord_flip()
Combining Jitter and Boxplots 1

Combining Jitter and Boxplots 1

Sebelum melanjutkan, ada baiknya menyebutkan fungsi geom_boxjitter disediakan di paket ggpol. Ini membuat plot kotak hibrida - setengah plot kotak, setengah plot sebar.

library(ggplot2)                                     # visualisasi
library(scales)                                      # infrastruktur penskalaan
library(ggpol)                                       # boxplot hybrid -half 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 = "Gaji akademik berdasarkan pangkat", 
       subtitle = "9 bulan gaji untuk 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

Plot lebah (juga disebut plot pencar biola) mirip dengan plot sebar jittered, yang menampilkan variabel distribusi kuantitatif dengan memplot titik dengan cara yang mengurangi tumpang tindih. Selain itu, mereka juga membantu menampilkan data kepadatan di setiap titik (dengan cara yang mirip dengan violin plot). Melanjutkan contoh sebelumnya.

library(ggplot2)                                     # Visualisasi
library(scales)                                      # infrastruktur skala
library(ggbeeswarm)                                  # mengurangi tumpang tindih
ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           color = rank)) +
  geom_quasirandom(alpha = 0.7,
                   size = 1.5) + 
  scale_y_continuous(label = dollar) +
  labs(title = "Gaji akademik berdasarkan pangkat", 
       subtitle = "9 bulan gaji untuk 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none")
Beeswarm Plots

Beeswarm Plots

Plot dibuat menggunakan fungsi geom_quasirandom. Plot ini bisa lebih mudah dibaca daripada plot strip bergoyang sederhana. Untuk mempelajari lebih lanjut tentang plot ini, lihat Beeswarm-style plots dengan ggplot2.

2.3.10 Grafik Cleveland Dot

Plot Cleveland berguna saat Anda ingin membandingkan statistik numerik untuk sejumlah besar grup. Misalnya, Anda ingin membandingkan angka harapan hidup tahun 2007 untuk negara Asia dengan menggunakan ekstensi data gapminder.

library(dplyr)                                       # manipulasi data
library(ggplot2)                                     # visualisasi
library(scales)                                      # infrastruktur skala
library(ggbeeswarm)                                  # mengurangi tumpang tingdih
library(gapminder)                                   # dataset `gapminder` 
data(gapminder, package="gapminder")                 # muat data  `gapminder` 
# bagain negara asia 2007
library(dplyr)
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)
# plot cleveland yang lebih bagus
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 = "Harapan hidup (tahun)",
        y = "",
        title = "Harapan hidup menurut negaraCountry",
        subtitle = "GapMinder data untuk Asia - 2007") +
  theme_minimal() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())
Beeswarm Plots

Beeswarm Plots

Jepang tentu saja mempunyai harapan hidup paling tinggi, sementara afganistan paling rendah sejauh ini. plot ini dinamakan plot lolipop.

3 Data Multivariate

Grafik multivariasi menampilkan hubungan antara tiga variabel atau lebih. Ada dua metode umum untuk mengakomodasi banyak variabel: pengelompokan dan faceting.

3.1 Mengelompokkan

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

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
data(Salaries, package="carData")
ggplot(Salaries, aes(x = yrs.since.phd, 
                     y = salary, 
                     color=rank)) +
  geom_point() +
  theme_minimal() +
  labs(title = "Gaji akademis berdasarkan pangkat dan tahun sejak gelar")
Multivariate Grouping Plot 1

Multivariate Grouping Plot 1

Selanjutnya, tambahkan jenis kelamin profesor, menggunakan bentuk titik untuk menunjukkan jenis kelamin. Kami akan meningkatkan ukuran poin dan menambahkan transparansi untuk memperjelas poin individu.

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = rank, 
           shape = sex)) +
  geom_point(size = 3, alpha = .6) +
  theme_minimal() +
  labs(title = "Gaji akademis berdasarkan pangkat, jenis kelamin, dan tahun sejak gelar")
Multivariate Grouping Plot 2

Multivariate Grouping Plot 2

Kami tidak dapat mengatakan bahwa ini adalah grafik yang bagus. Ini sangat sibuk, dan mungkin sulit untuk membedakan profesor pria dari wanita. Faceting (dijelaskan di bagian selanjutnya) mungkin akan menjadi pendekatan 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 adalah contoh yang lebih bersih. Kami akan membuat grafik hubungan antara tahun sejak Ph.D. dan gaji yang menggunakan ukuran poin untuk menunjukkan masa kerja. Ini disebut plot gelembung.

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = rank, 
           size = yrs.service)) +
  geom_point(alpha = .8) +
  theme_minimal() +
  labs(title = "Gaji akademis berdasarkan pangkat, jenis kelamin, dan tahun sejak gelar")
Multivariate Grouping Plot 3

Multivariate Grouping Plot 3

Jelas ada hubungan positif yang kuat antara tahun-tahun sejak Ph.D. dan tahun layanan. Asisten Profesor jatuh dalam 0-11 tahun sejak Ph.D. dan jangkauan layanan 0-10 tahun. Profesional yang jelas sangat berpengalaman tidak hanya berada di level Asisten Profesor (mereka mungkin dipromosikan atau keluar dari Universitas). Kami tidak menemukan batasan waktu yang sama antara Associate dan Full Professor. Bubble plots akan dijelaskan lebih detail di bab selanjutnya.

Sebagai contoh terakhir, mari kita lihat yrs.since.phd vs gaji dan tambahkan jenis kelamin menggunakan warna dan quadratic best fit lines.

library(carData)                                     # dataset
library(ggplot2)                                     # 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 = "tahun sejak  Ph.D.",
       title = "gaji akademik berdasarkan kelamin dan pengalaman",
       subtitle = "9 bulan gaji untuk 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

Pengelompokan memungkinkan Anda untuk memplot beberapa variabel dalam satu grafik, menggunakan karakteristik visual seperti warna, bentuk, dan ukuran. Dalam faset, grafik terdiri dari beberapa plot terpisah atau kelipatan kecil, satu untuk setiap tingkat variabel ketiga, atau kombinasi variabel. Paling mudah untuk memahami ini dengan sebuah contoh.

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
ggplot(Salaries, aes(x = salary)) +
  geom_histogram(fill = "cornflowerblue",
                 color = "white") +
  facet_wrap(~rank, ncol = 1) +
  theme_minimal() +
  labs(title = "histogram gaji berdasarkan pangkat")
Multivariate Faceting 1

Multivariate Faceting 1

Fungsi facet_wrap membuat grafik terpisah untuk setiap tingkat peringkat. Opsi ncol mengontrol jumlah kolom. Dalam contoh berikutnya, dua variabel digunakan untuk mendefinisikan faset.

3.2.2 Faceting 2

Di sini, fungsi menetapkan jenis kelamin ke baris dan peringkat ke kolom, membuat matriks 6 plot dalam satu grafik.

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
ggplot(Salaries, aes(x = salary / 1000)) +
  geom_histogram(color = "white",
                 fill = "cornflowerblue") +
  facet_grid(sex ~ rank) +
  theme_minimal() +
  labs(title = "histogram gaji menurut pangkat dan kelamin",
       x = "Salary ($1000)")
Multivariate Faceting 2

Multivariate Faceting 2

3.2.3 Faceting 3

Kami juga dapat menggabungkan pengelompokan dan faceting. Mari kita gunakan plot Mean / SE dan faceting untuk membandingkan gaji profesor pria dan wanita, dalam pangkat dan disiplin. Kami akan menggunakan warna untuk membedakan jenis kelamin dan faceting untuk membuat plot peringkat berdasarkan kombinasi disiplin ilmu.

library(carData)                                     # dataset
library(ggplot2)                                     # visualisasi
library(dplyr)                                       # manipulasi data
# hitung rataan dan standar deviasi menurut kelamin
# pangkat dan disiplin
plotdata <- Salaries %>%
  group_by(sex, rank, discipline) %>%
  dplyr::summarize(n = n(),
            mean = mean(salary),
            sd = sd(salary),
            se = sd / sqrt(n))
# buat tabel yang lebih baik untuk disimplin
plotdata$discipline <- factor(plotdata$discipline,
                              labels = c("Theoretical",
                                         "Applied"))
# create 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 sembilan bulan menurut jenis kelamin, disiplin, dan pangkat ",
       subtitle = "(Sarana dan kesalahan standar)") +
  scale_color_brewer(palette="Set1")
Multivariate Faceting 3

Multivariate Faceting 3

pernyataanfacet_grid(. ~ rank + discipline) menentukan tidak ada variabel baris (.) dan kolom yang ditentukan oleh kombinasi peringkat dan disiplin.

Fungsi theme () membuat tema hitam dan putih dan menghilangkan garis grid vertikal dan garis grid horizontal minor. Fungsi scale_color_brewer () mengubah skema warna untuk titik dan bilah kesalahan.

Pada pandangan pertama, tampaknya ada perbedaan gender dalam gaji untuk associate dan profesor penuh di bidang teoretis. Saya mengatakan “mungkin” karena kami belum melakukan pengujian hipotesis formal (ANCOVA dalam kasus ini). Lihat Customizing bagian untuk mempelajari lebih lanjut tentang menyesuaikan tampilan grafik.

3.2.4 Faceting 4

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

library(gapminder)                                   # dataset
library(ggplot2)                                     # visualisasi
library(dplyr)                                       # manipulasi data
# plot harapan hidup menurut tahun secara terpisah
# untuk setiap negara di Amerika
data(gapminder, package = "gapminder")

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

# plot harapan hidup menurut 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 = "perubah harapan hidup",
       x = "Year",
       y = "Life Expectancy") 
Multivariate Faceting 4

Multivariate Faceting 4