Email: sherlytaurinsiri@gmail.com
RPubs: https://rpubs.com/sherlytaurin/
Github: https://github.com/sherlytaurin/
Visualisasi Data adalah teknik mengambil informasi dari data menjadi visual seperti bagan, grafik, dan peta. Visualisasi data, memungkinkan untuk menangani data kecil atau bahkan data besar sehingga lebih mudah untuk dimengerti oleh otak manusia, Visualisasi juga membuat data lebih bisa dideteksi polanya, garis keseimbangannya, dan pencilan yang terdapat pada data.
R adalah platform yang luat biasa untuk melakukan analisis data, yang mampu membuat hampir semua jenis grafik. Buku ini akan membantu anda membuat visualisasi yang paling populer dari plot yang cepat dan berantakan hingga grafik yang siap untuk dipublikasi. Disini kita akan belajar bersamaa bagaimana memvisualisasikan data dari univariate, bivariate, dan multivariate. Dari yang paling dasar hingga tingkatan yang lebih sulit, diharapkan ikuti instruksi berikut step per step.
Plot univariat biasanya digunakan untuk melakukan distribusi data dari satu variabel. Variabelnya bisa berupa kategoris (contoh, jenis kelamin, ras, Negara, kota, dsb) atau kuantitatif (seperti, umur, berat badan, inflasi, nilai, dsb).
Distribusi data dari satu variabel plotnya dapat berupa bar-chart, pie-chart, atau (yang jarang) treemap.
Berikut adalah beberapa contoh dari Marriage dataset, Saya mengambilnya dari package mosaicData. Kita menggunakan bar-chart untuk menampilkan distribudi dari partisipan pernikahan (marriage) dengan Zodiac
library(ggplot2) # untuk visualisasi
#setwd("C:/Users/vferd/Documents/Sherly/Campus/Semester 3/Algoritma/week 13") # atur working directory
Marriage<- read.csv("Data/Marriage.csv") # mengload data dari pc
ggplot(Marriage, aes(x = zodiacs)) + # membuat plot distribusi dari `Zodiacs`
geom_bar(fill = "cornflowerblue",color= "azure4")+ # kita bisa mengganti warnanya
theme_minimal() + # memilih theme minimal
labs(x = "Zodiacs", # kita bisa memodifikasi label dan judul plotnya
y = "Frequency",
title = "Marriage Participants by Zodiacs") Categorical Bar Chart 1
Bars/batang bisa mewakilkan persentase dibandingkan jumlah. Untuk bar-charts (zodiacs), kode aes(x=sign) adalah shortcut untuk aes(x = sign, y = ..count..), dimana ..count.. adalah sebuah variabel spesial yang merepresentasikan frekuensi setiap kategorinya. Kita bisa menggunakan ini untuk menghitung persentasi, dengan y sebagai variabel eksplisitnya.
Pada R, warna bisa ditentukan berdasarkan namanya (contoh col = “red”) seperti yang tercantum pada gambar dibawah ini.
atau bisa juga dengan mengetikkan triplet RGB heksadesimal untuk menentukan warna (seperti col = “#FFCC00”) More. Selain itu, kita juga bisa menggunakan warna lainnya dari sistem seperti yang ada pada package RColorBrewer More dan package grDevices (mungkin kamu sudah mengload package ini) berisi angka dari palettes, ketik ?rainbow pada Rconsole. Mari kita melihat grafik berikut:
library(ggplot2) # untuk visualisasi
ggplot(Marriage,
aes(x = zodiacs,
y = ..count.. / sum(..count..))) +
geom_bar(fill = rainbow(12), color= "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Percent",
title = "Marriage Participants in Percent") +
scale_y_continuous(labels = scales::percent) # menambahkan % pada nilai y Categorical Bar Chart 2
Mengurutkan bar berdasarkan frekuensi sering kali dapat sangat membantu. Pada kode dibawah ini, frekuensi dihitung secara eksplisit. Kemudian funsi reorder digunakan untuk mengurutkan kategori berdasarkan frekuensi. Opsi stat="identity" memberiitahu fungsi plotting untuk tidak menghitung jumlah, karena mereka diberikan secara langsung.
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi data
plotdata <- Marriage %>% # mengload dataset
count(zodiacs) # menghitung partisipan di setiap `zodiacs`
# plot the bars in ascending order
ggplot(plotdata,
aes(x = reorder(zodiacs, n),
y = n)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color= "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Sorting Categories")Categorical Bar Chart 3
Jika kita mungkin ingin memberi label nilai numerik pada setiap bar, mari kita coba kode berikut:
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi data
library(scales) # Secara otomatis menentukan break/label
plotdata <- Marriage %>%
count(zodiacs) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct*100), "%"))
# menentukan plot bar dalam persentase dengan urutan menurun
ggplot(plotdata,
aes(x = reorder(zodiacs, -pct),
y = pct)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
geom_text(aes(label = pctlabel),
vjust = -0.25) +
theme_minimal() + # menggunakan tema minimal
scale_y_continuous(labels = percent) +
labs(x = "Zodiacs",
y = "Percent",
title = "Labeling Bars")Categorical Bar Chart 4
Terkadang beberapa label kategori mungkin saling tumpang tindih. Hal itu sangat mengganggu bukan?. Jadi kita bisa memutar label sumbunya.
library(ggplot2) # untuk visualisasi
library(scales) # secara otomatis menentukan break/label
# plot the bars as percentages,
# in decending order with bar labels
ggplot(plotdata,
aes(x = reorder(zodiacs, -pct),
y = pct)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
geom_text(aes(label = pctlabel),
vjust = -0.25) +
scale_y_continuous(labels = percent) +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Percent",
title = "Overlapping Labels")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))Categorical Bar Chart 5
Atau jalan lainnya, kita dapat mengatasi situasi ini dengan menukar sumbu x dan y.
library(ggplot2) # for visualization
library(scales) # automatically determining breaks/labels
# plot the bars as percentages,
# in decending order with bar labels
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() + # use a minimal theme
labs(x = "Zodiacs",
y = "Percent",
title = "Overlapping Labels")+
coord_flip()Categorical Bar Chart 6
Grafik lingkaran bersifat kontroversial dalam statistik. Jika tujuanmu adalah membangingkan frekuensi kategori, lebih baik anda menggunakan bar-chart (manusia lebih baik dalam menital panjang bar dari pada volume irisan lingkaran). Jika tujuan ada untuk membandingkan setiap kategori dengan keseluruhan (misalkan, berapa bagian peserta yang merupakan Hispanik jika dibandingkan dengan semua perserta), dan jumlah kategorinya kecil, maka grafik lingkaran mungkin cocok untuk digunakan. Dibutuhkan lebih banyak kode untuk membuat grafik lingkaran yang menarik di R.
Berikut adalah contoh untuk membuat grafik lingkaran ggplot2 dasar:
library(dplyr) # data manupulasi
library(ggplot2) # visualisasi
library(scales) # secara otomatis menenrukan break/label
# Preparasi Data
plotdata <- Marriage %>%
count(race) %>%
arrange(desc(race)) %>%
mutate(prop = round(n*100/sum(n), 1),
lab.ypos = cumsum(prop) - 0.5*prop)
# Membuat pie-chart
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
Grafik donat hanyalah grafik lingkaran sederhana dengan lubang didalamnya. Perbedaannya hanyalah kita mengatur:x=2 danxlim=c(0,5, 2.5) pada kode diagram lingkaran untuk membuat lubang di dalam diagram lingkaran. Selain itu, argumen width pada fungsi geom_bar() tidak diperlukan lagi.
library(ggplot2) # visualisasi
library(scales) # otomatis menentukan label/break
# 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
Sekarang mari kita menjadi berangan-angan dan menambahkan label, sambil menghilangkan tulisan.
library(ggplot2) # visualisasi
library(scales) # secara otomatis menentukan label/break
# menambahkan label persen
plotdata$percent <- paste0(plotdata$race, "\n",
round(plotdata$prop), "%")
# membuat grafik donat dalam persen
ggplot(plotdata, aes(x = 2, y = prop, fill = race)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0)+
geom_text(aes(y = lab.ypos, label = percent), color = "white")+
scale_fill_manual(values = mycols) +
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Marriage Participants by Race")Categorical Donut Chart 2
alternatif dari grafik lingkaran/ diagram lingkaran, adalah diagram pohon. Tidak seperti diagram lingkaran. diagram pohon bisa mengatasi variabel kategorikal yang memiliki banyak tingkatan.
library(ggplot2) # Untuk visualisasi dasar
library(treemapify) # untuk visualisasi diagram pohon
library(scales) # secara otomatis menentukan break/level
plotdata <- Marriage %>%
count(officialTitle)
ggplot(plotdata,
aes(fill = officialTitle,
area = n)) +
geom_treemap() +
labs(title = "Marriage Participants by Officiate")Categorical Tree Map 1
Berikut ini adalah versi yang lebih berguna dengan label
ggplot(plotdata,
aes(fill = officialTitle,
area = n,
label = officialTitle)) +
geom_treemap() +
geom_treemap_text(colour = "white",
place = "centre") +
labs(title = "Marriage Participants by Officiate") +
theme(legend.position = "none")Categorical Tree Map 2
Distribusi variabel kuantitatif tunggal biasanya diplotkan dengan histogram, kernel density plot, or plot titik
Dengan menggunakan data Marriage, mari kita membuat plot dari umur para pastisipan pernikahan.
library(ggplot2) # untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_histogram(fill = "cornflowerblue",
color = "white",bins = 20) +
theme_minimal() + # menggunakan tema minimal
labs(title="Marriage Participants by age (Basic)",
x = "Age")Quantitative Histogram
Sebagian besar peserta yang tampaknya berusia awal 20-an dengan kelompok lain berusia 40-an, dan kelompok yang jauh lebih kecil berusia 60-an dan awal 70-an. Ini akan menjadi distribusi multimoda. Warna histogram dapat dimodifikasi menggunakan dua opsi:
Atau kamu dapat menentukannya dengan binwidth, lebarnya bins diwakili oleh barnya.
library(ggplot2) # untuk visualisasi
library(scales) # menentukan break/label secara otomatis
ggplot(Marriage,
aes(x = age,
y= ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # menggunakan tema minimal
labs(title="Marriage Participants by age (Alternative Bins and bandwidths)",
y = "Percent",
x = "Age") +
scale_y_continuous(labels = percent)Quantitative Histogram 2
Seperti grafik bar, sumbu y dapat mewakili perhitungan atau persen dari total.
library(ggplot2) # untuk visualisasi
library(scales) # menentukan break/label secara otomatis
ggplot(Marriage,
aes(x = age,
y= ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # menggunakan tema minimal
labs(title="Marriage Participants by age (Percent)",
y = "Percent",
x = "Age") +
scale_y_continuous(labels = percent)Quantitative Histogram 3
Sebuah 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. Pada dasarnya, kami mencoba menggambar histogram yang dihaluskan, di mana area di bawah kurva sama dengan satu.
library(ggplot2) # untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_density(fill = "indianred3") +
theme_minimal() + # menggunakan tema minimal
labs(title = "Marriage Participants by age")Quantitative Kenel Density Plot
Grafik menunjukkan distribusi skor. Sevagai contoh, The graph shows the distribution of scores.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.
Tingkat kehalusan dikontrol oleh parameter bandwidth bw. Untuk menemukan nilai default untuk variabel tertentu, gunakan fungsi bw.nrd0. Nilai yang lebih besar akan menghasilkan hasil yang lebih halus/mulus, sedangkan nilai yang lebih kecil akan menghasilkan hasil yang kurang mulus/halus.
## [1] 5.181946
ggplot(Marriage, aes(x = age)) +
geom_density(fill = "deepskyblue",
bw = 1) +
theme_minimal() + # menggunakan tema minimal
labs(title = "Participants by age",
subtitle = "bandwidth = 1")Smoothing Parameter Plot
Plot kepadatan kernel memungkinkan kita untuk melihat skor mana yang paling sering dan mana yang relatif jarang dengan lebih mudah. Tetapi sulit untuk menjelaskan arti sumbu-y kepada seseorang yang non-ahli statistik. (Tapi hal itu akan membuat anda terlihat pintar pada party!)
Alternatif lain untuk histogram adalah diagram titik. Sekali lagi, variabel kuantitatif dibagi menjadi beberapa kelompok, tetapi bukannya ringkasan bar, 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. Hal ini akan bekerja dengan sangat baik ketika jumlah data yang diobservasinya kecil (kurang dari 150).Opsi isian dan warna dapat digunakan untuk menentukan warna isian dan batas masing-masing titik
library(ggplot2) # untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_dotplot(fill = "gold",
color = "azure4",
binwidth = 2) +
theme_minimal() + # use a minimal theme
labs(title = "Participants by age",
y = "Proportion",
x = "Age")Dot Chart
ada banyak pilihan yang tersedia. klik here untuk detail dan contohnya.
Grafik Bivariate, menampilkan hubungan antara dua variabel. Tipe grafik akan tergantung pada tingkatan dari variabelnya (kategorikal atau kuantitatif).
Mari kita membuat 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() + # Menggunakan tema minimal
labs(y = "Proportion")Stacked Bar Chart
Grafik 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) # untuk visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
theme_minimal() + # menggunakan tema minimal
geom_bar(position = position_dodge(preserve = "single"))Grouped Bar Chart
Grafik Batang memotong adalah grafik batang bertumpuk di mana setiap batang mewakili 100 persen.Kita 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 penggerak roda depan mobil meningkat saat kamu beralih dari compact, ke ukuran sedang, ke minivan.
library(dplyr) # Manipulasi data
library(ggplot2) # Visualisasi
library(scales) # Menentukan break/label secara otomatis
# Membuat ringkasan(summary) dari dataset (manipulasi data)
plotdata <- mpg %>%
group_by(class, drv) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
# membuat bar chart memotong
# menambah label untuk setiap potongannya
ggplot(plotdata,
aes(x = factor(class),
y = pct,
fill = factor(drv))) +
geom_bar(stat = "identity",
position = "fill") +
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 3,
position = position_stack(vjust = 0.5)) +
scale_fill_brewer(palette = "Set2") +
theme_minimal() + # menggunakan tema minimal
labs(y = "Percent",
fill = "Drive Train",
x = "Class",
title = "Automobile Drive by Class") +
theme_minimal()Segmented Bar Chart
Catatan: Anda bisa menggunakan opsi tambahan untuk meningkatkan warna dan pelabelan pada grafik dibawah ini
factor mengubah urutan kategori untuk variabel kelas dan urutan, serta * labels untuk variabel drivescale_y_continuous mengubah label tanda centang sumbu ylabs menyediakan judul dan mengubah label untuk sumbu x dan y serta tulisanscale_fill_brewer mengubah skema warna isiantheme_minimal menghapus latar belakang abu-abu dan mengubah warna kisiFungsi lainnya dibahas lebih lengkap pada bagian pada Bab Visualisasi Data Lanjutan.
Bagan mosaic 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 mosaic dapat dibuat dengan ggplot2 menggunakan package ggmosaic, saya sarankan menggunakan package vcd sebagai gantinya. Meskipun tidak akan membuat grafik ggplot2, package 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 berdasarkan jenis kelamin dan kelas dalam bertahan hidup? Kita dapat memvisualisasikan hubungan antara ketiga variabel kategori ini dengan menggunakan kode di bawah ini.
## 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
## Loading required package: grid
Basic mosaic plot
Ukuran tilenya 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 independent, kita dapat memeriksa residual dari model dan memberi bayangan pada tile 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 independent 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
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 lebih dari yang diekspektasikan. Sebaliknya, jauh lebih sedikit penumpang kelas satu (pria dan wanita) yang meninggal daripada yang diperkirakan secara kebetulan. Dengan demikian asumsi independen ditolak. (Spoiler: Leo tidak berhasil.)
Hubungan antara dua variabel kuantitatif biasanya ditampilkan menggunakan diagram sebar dan grafik garis.
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 scatterplot, dan tugas umum terdiri untuk menyesuaikan model yang menjelaskan Y dalam fungsi X. Berikut adalah beberapa pola yang dapat Anda deteksi dengan membuat scatterplot..
library(ggplot2) # visualisasi data
library(hrbrthemes) # untuk mengaktifkan`theme_ipsum()` dan legend
# membuat data
d1 <- data.frame(x=seq(1,100),
y=rnorm(100),
name="No trend")
d2 <- d1 %>%
mutate(y=x*10 + rnorm(100,sd=60)) %>%
mutate(name="Linear relationship")
d3 <- d1 %>%
mutate(y=x^2 + rnorm(100,sd=140)) %>%
mutate(name="Square")
d4 <- data.frame( x=seq(1,10,0.1),
y=sin(seq(1,10,0.1)) +
rnorm(91,sd=0.6)) %>%
mutate(name="Sin")
don <- do.call(rbind, list(d1, d2, d3, d4))
# Plot / grafik
don %>%
ggplot(aes(x=x, y=y)) +
geom_point(color="#69b3a2", alpha=0.8) +
theme_ipsum() +
facet_wrap(~name, scale="free")relationship scatterplots
Tampilan paling sederhana dari dua variabel kuantitatif adalah scatterplot, 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) # untuk visualisasi
library(scales) # menentukan break/label secara otomatis
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() + # menggunakan tema minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Scatterplot 1
Catatan: opsi geom_point dapat digunakan untuk mengubah
color - warna titiksize - ukuran titikshape - bentuk titikalpha - transparansi titik. Transparansi berkisar dari 0 (transparan) hingga 1 (buram), dan merupakan parameter yang berguna saat titik tumpang tindihFungsi scale_x_continuous danscale_y_continuous mengontrol penskalaan masing-masing pada sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat scatterplot yang lebih menarik.
ISeringkali 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() + # menggunakan tema minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Scatterplot Linear
Jelas, gaji meningkat sesuai 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 kesesuaian dari form
\[\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) # untuk visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary)) +
geom_point(color= "cornflowerblue") +
geom_smooth(method = "lm",
formula = y ~ poly(x, 2),
color = "yellow")+
theme_minimal() + # menggunakan tema minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Scatterplot Quadratic
khirnya, 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 scatterplot berbobot lokal.
library(ggplot2) # for visualization
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() + # use a minimal theme
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009") +
theme_minimal()Scatterplot Smoothed Nonparametric
Saat memplot hubungan antara variabel kategori dan variabel kuantitatif, tersedia banyak jenis grafik. Ini termasuk bar-chart yang menggunakan summary statistik , plot kepadatan kernel yang dikelompokkan, plot kotak berdampingan, plot violin berdampingan, plot mean / sem, plot ridgeline, dan plot Cleveland.
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 summary statistik 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) # untuk manipulasi data
library(ggplot2) # untuk visualisasi data
library(scales) # menentukan break/label secara otomatis
data(Salaries, package="carData")
# mengkalkulasi rata rata gaji untuk setiap tingkatan
plotdata <- Salaries %>%
group_by(rank) %>%
dplyr::summarize(mean_salary = mean(salary))
# plot rata rata gaji dengan 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() + # menggunakan tema minimal
labs(title = "Mean Salary by Rank",
subtitle = "9-month academic salary for 2008-2009",
x = "",
y = "")Bar Chart (Summary statistics)
Seseorang dapat membandingkan grup pada variabel numerik dengan melapiskan kernel density plot dalam satu grafik. Mari kita membuat 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 = "Salary distribution by rank")Grouped Kernel Density Plots
Pilihan alpha membuat plot kepadatan menjadi 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.
box-plot menampilkan \(25^{th}\) persentil, median, dan \(75^{th}\) persentil dari sebuah distribusi. The whiskers (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
Plot kotak berdampingan sangat berguna untuk membandingkan kelompok (yaitu, level variabel kategori) pada variabel numerik. Mari kita membuat 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
Pada 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.
Plot biola hamppir sama dengan plot kernel density tetapi dicerminkan dan diputar \(90^0\). Mari kita membuat 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
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 package ggridges.
mennggunakan data Fuel economy, mari kita membuat plot distribusi mil mengemudi kota per galon dengan kelas mobil.
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(ggridges) # untuk mengatasi visualisasi yang tumpang tindih
ggplot(mpg,
aes(x = cty,
y = class,
fill = class)) +
geom_density_ridges(alpha = 0.7) +
theme_ridges() +
labs("Highway mileage by auto class") +
theme(legend.position = "none")Ridgeline Plots
Saya telah menyembunyikan tulisan di sini karena itu berlebihan (distribusinya sudah diberi label pada sumbu y). Tidak mengherankan, truk pick up memiliki jarak tempuh yang paling rendah, sementara subcompact dan compact 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 compact. 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 detailnya.
Metode populer untuk membandingkan grup pada variabel numerik adalah plot rata-rata dengan error bar. Error bar dapat mewakili standar deviasi, standar error mean, atau interval kepercayaan. Di bagian ini, kami akan memplot cara dan standar error. 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) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(ggridges) # untuk menangani visulisasi yang tumpang tindih
# menghitung rataa, standar deviasi,
# standar error, tingkat kepercayaan 95%
# interval berdasarkan tingkat
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))
# memperbaiki 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
Hubungan antara variabel pengelompokan dan variabel numerik dapat ditampilkan dengan scatter plot. Misalnya, plot distribusi gaji menurut peringkat menggunakan strip plot. scatter plot satu dimensi ini disebut strip plot. 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) # pengscalaan infrastructure
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
Opsi legend.position =" none " digunakan untuk menyembunyikan tulisan (yang tidak diperlukan di sini). Plot jittered bekerja dengan baik jika jumlah poin tidak terlalu besar.
Mungkin lebih mudah untuk memvisualisasikan distribusi jika kita menambahkan box plot ke plot jitter. Beberapa opsi ditambahkan untuk membuat plot ini.
size = 1 membuat garis lebih tebaloutlier.color = "black" membuat tepi hitamoutlier.shape = 1 menentukan lingkaran untuk tepioutlier.size = 3 menaikkan ukuran tepialpha = 0.5 membuat titik transparanwidth = .2 mengurngi jumlah jitter (.4 errornya)sehingga, sumbu \(x\) dan \(y\) diputar menggunakan fungsi coord_flip (yaitu, grafik diputar pada sisinya).
library(ggplot2) # visualisasi
library(scales) # mengskalakan infrastuktur
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
color = rank)) +
geom_boxplot(size=1,
outlier.shape = 1,
outlier.color = "black",
outlier.size = 3) +
geom_jitter(alpha = 0.5,
width=.2) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none") +
coord_flip()Combining Jitter and Boxplots 1
Sebelum melanjutkan, ada baiknya menyebutkan fungsi geom_boxjitter disediakan di package ggpol. Ini membuat boxplot hibrida - setengah boxplot, setengah scatterplot.
library(ggplot2) # visualisasi
library(scales) # mengskalakan infrastruktur
library(ggpol) # mengaktifkan boxplot hybrid - setengah scatter plot
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
fill=rank)) +
geom_boxjitter(color="black",
jitter.color = "darkgrey",
errorbar.draw = TRUE) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none")Combining Jitter and Boxplots 2
Plot lebah (disebut juga plot pencar biola) mirip dengan plot sebar jittered, yang menampilkan variabel distribusi kuantitatif dengan memplot titik dengan cara 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) # untuk visualisasi
library(scales) # mengskalakan infrastruktur
library(ggbeeswarm) # mengurangi tumpang tindih
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
color = rank)) +
geom_quasirandom(alpha = 0.7,
size = 1.5) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none")Beeswarm Plots
Plot dibuat menggunakan fungsi geom_quasirandom. Plot ini bisa lebih mudah dibaca daripada plot jittered strip sederhana. Untuk mempelajari lebih lanjut tentang plot ini, lihat Beeswarm-style plots dengan ggplot2.
Plot Cleveland berguna saat Anda ingin membandingkan statistik numerik untuk grup dengan jumlah yang besar. Misalnya, Anda ingin membandingkan angka harapan hidup tahun 2007 untuk negara Asia dengan menggunakan dataset gapminder.
library(dplyr) # untuk manipulasi data
library(ggplot2) # visualisasi
library(scales) # mengscalakan data
library(ggbeeswarm) # mengurangi tumpang tindih
library(gapminder) # untuk mengaktifkan dataset `gapminder`
data(gapminder, package="gapminder") # menjalankan dataset `gapminder`
# membagi negara asia tahun 2007
library(dplyr)
plotdata <- gapminder %>%
filter(continent == "Asia" &
year == 2007)
# membuat 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 = "Life Expectancy (years)",
y = "",
title = "Life Expectancy by Country",
subtitle = "GapMinder data for Asia - 2007") +
theme_minimal() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())Beeswarm Plots
Jepang tentu saja mempunyai harapan hidup paling tinggi, sementara Afganistan memiliki harapan hidup paling rendah sejauh ini. plot ini dinamakan grafik lolipop.
Grafik multivariasi menampilkan hubungan antara tiga variabel atau lebih. Ada dua metode umum untuk mengakomodasi banyak variabel: pengelompokan dan faceting.
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 Kita untuk memplot data untuk beberapa grup ke dalam satu grafik. Dengan menggunakan Dataset Salaries, mari kita tunjukkan hubungan antara yrs.since.phd dan gaji.
library(carData) # untuk dataset
library(ggplot2) # untuk visualisasi
data(Salaries, package="carData")
ggplot(Salaries, aes(x = yrs.since.phd,
y = salary,
color=rank)) +
geom_point() +
theme_minimal() +
labs(title = "Academic salary by rank and years since degree")Multivariate Grouping Plot 1
Lalu, tambahkan jenis kelamin dari profesor, gunakan bentuk titik untuk menunjukkan jenis kelamin. Kita akan meningkatkan ukuran poin dan menambahkan transparansi untuk memperjelas poin per-individu.
library(carData) # untuk dataset
library(ggplot2) # untuk visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary,
color = rank,
shape = sex)) +
geom_point(size = 3, alpha = .6) +
theme_minimal() +
labs(title = "Academic salary by rank, sex, and years since degree")Multivariate Grouping Plot 2
Kita tidak bisa mengatakan bahwa ini adalah grafik yang baik. Ini sangat padat, dan mungkin sulit untuk membedakan antara 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 ini adalah contoh yang lebih bersih. Kita akan membuat grafik hubungan antara tahun sejak Ph.D. dan gaji yang menggunakan ukuran poin untuk menunjukkan masa kerja. Ini disebut plot gelembung (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 = "Academic salary by rank, years of service, and years since degree")Multivariate Grouping Plot 3
Jelas ada hubungan positif yang kuat dari tahun ke 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) # untuk dataset
library(ggplot2) # untuk visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary,
color = sex)) +
geom_point(alpha = .4,
size = 3) +
geom_smooth(se=FALSE,
method = "lm",
formula = y~poly(x,2),
size = 1.5) +
labs(x = "Years Since Ph.D.",
title = "Academic Salary by Sex and Years Experience",
subtitle = "9-month salary for 2008-2009",
y = "",
color = "Sex") +
scale_y_continuous(label = scales::dollar) +
scale_color_brewer(palette = "Set1") +
theme_minimal()Multivariate Grouping Plot 4
Pengelompokan memungkinkan kita untuk membuat plot beberapa variabel dalam satu grafik, menggunakan karakteristik visual seperti warna, bentuk, dan ukuran. Dalam faceting, 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) # untuk dataset
library(ggplot2) # untuk visualisasi
ggplot(Salaries, aes(x = salary)) +
geom_histogram(fill = "cornflowerblue",
color = "white") +
facet_wrap(~rank, ncol = 1) +
theme_minimal() +
labs(title = "Salary histograms by rank")Multivariate Faceting 1
Fungsi facet_wrap membuat grafik terpisah untuk setiap tingkat peringkat. Opsi ncol mengontrol jumlah kolom. Di contoh berikutnya, dua variabel digunakan untuk mendefinisikan facet.
Di sini, fungsi faceting menetapkan jenis kelamin ke baris dan peringkat ke kolom, membuat matriks 6 plot dalam satu grafik.
library(carData) # untuk dataset
library(ggplot2) # untuk visualisasi
ggplot(Salaries, aes(x = salary / 1000)) +
geom_histogram(color = "white",
fill = "cornflowerblue") +
facet_grid(sex ~ rank) +
theme_minimal() +
labs(title = "Salary histograms by sex and rank",
x = "Salary ($1000)")Multivariate Faceting 2
Kita juga bisa 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) # untuk dataset
library(ggplot2) # untuk visualisasi
library(dplyr) # manipulasi data
# menghitung rata-rata dan standar error dari jenis kelamin,
# tingkatan dan disiplin
plotdata <- Salaries %>%
group_by(sex, rank, discipline) %>%
dplyr::summarize(n = n(),
mean = mean(salary),
sd = sd(salary),
se = sd / sqrt(n))
# membuat tabel yang lebih baik untuk disiplin
plotdata$discipline <- factor(plotdata$discipline,
labels = c("Theoretical",
"Applied"))
# membuat plot
ggplot(plotdata,
aes(x = sex,
y = mean,
color = sex)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = mean - se,
ymax = mean + se),
width = .1) +
scale_y_continuous(breaks = seq(70000, 140000, 10000),
label = scales::dollar) +
facet_grid(. ~ rank + discipline) +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.y = element_blank()) +
labs(x="",
y="",
title="Nine month academic salaries by gender, discipline, and rank",
subtitle = "(Means and standard errors)") +
scale_color_brewer(palette="Set1")Multivariate Faceting 3
Pernyataan facet_grid(. ~ rank + discipline) menentukan tidak ada variabel baris (.) dan kolom yang ditentukan oleh kombinasi tingkatan (rank) 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 bar kesalahan.
Dipenglihatan mula-mula, tampaknya ada perbedaan gender dalam gaji untuk associate dan profesor penuh waktu di bidang teoritis. Saya berkata “mungkin” karena kita belum melakukan pengujian hipotesis formal (ANCOVA dalam kasus ini). Lihat bagian Customizing untuk mempelajari lebih lanjut tentang menyesuaikan tampilan grafik.
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 package gapminder. Setiap negara muncul dalam facetnya sendiri. Fungsi tema digunakan untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran font.
library(gapminder) # untuk dataset
library(ggplot2) # untuk visualisasi
library(dplyr) # manipulasi data
# plot harapan hidup menurut tahun secara terpisah
# untuk setiap negara di Amerika
data(gapminder, package = "gapminder")
# Memilih data Amerika
plotdata <- dplyr::filter(gapminder,
continent == "Asia")
# plot harapan hidup berdasarkan tahun untuk setiap negara bagian
ggplot(plotdata, aes(x=year, y = lifeExp)) +
geom_line(color="grey") +
geom_point(color="blue") +
facet_wrap(~country) +
theme_minimal(base_size = 9) +
theme(axis.text.x = element_text(angle = 45,
hjust = 1)) +
labs(title = "Changes in Life Expectancy",
x = "Year",
y = "Life Expectancy") Multivariate Faceting 4