5. Visualisasi Data Menggunakan GGPLOT

Daftar Isi

Library ggplot2 merupakan implementasi dari The Grammar of Graphics yang ditulis oleh Leland Wilkinson. ggplot2 merupakan library yang dikembangkan oleh Hadley Wicham ketika ia sedang menempuh kuliah di Lowa State Universuty dan masih dikembangkan hingga sekarang.

ggplot2 merupakan paket visualisasi yang powerfull. Kita dapat menggunakannya bersamaan dengan piping operator yang disediakan oleh paket dplyr sehingga menambah kemudahan kita dalam melakukan analisis data.

Grafik ggplot2 terdiri dari sejumlah komponen kunci. Berikut adalah sejumlah komponen kunci yang membentuk grafik ggplot2.

  • data frame: menyimpan semua data yang akan ditampilkan di plot.
  • aesthetic mapping: menggambarkan bagaimana data dipetakan ke warna, ukuran, bentuk, lokasi. Dalam plot diberikan pada fungsi aes()
  • geoms: objek geometris seperti titik, garis, bentuk.
  • facets: menjelaskan bagaimana plot bersyarat / panel harus dibangun.
  • stats: transformasi statistik seperti binning, quantiles, smoothing.
  • scales: skala apa yang digunakan oleh aesthetic map (contoh: pria = merah, wanita = biru).
  • coordinate system: menggambarkan sistem di mana lokasi geom akan digambarkan.

Sebelum kita mulai memcoba melakukan visualisasi data menggunakan ggplot2, kita perlu menginstall dan memuat terlebih dahulu library ggplot2. Berikut adalah sintaks yang digunakan untuk menginstall dan memuat paket ggplot2:

# memasang paket
# install.packages('ggplot2')

# memuat paket
library(ggplot2)

Dataset yang akan kita gunakan adalah dataset gapminder. Dataset ini berisi data demografi penduduk dari berbagai negara dan benua. Untuk dapat menggunakannya kita perlu menginstall dan memuatnya terlebih dahulu. Berikut adalah sintaks untuk menginstall dan memuat dataset tersebut:

# memasang paket
# install.packages("gapminder")

# memuat paket
library(gapminder)
## Warning: package 'gapminder' was built under R version 3.5.3
# memuat paket dplyr dan tibble
library(dplyr)
library(tibble)
## Warning: package 'tibble' was built under R version 3.5.3
# melihat struktur dataset
glimpse(gapminder)
## Observations: 1,704
## Variables: 6
## $ country   <fct> Afghanistan, Afghanistan, Afghanistan, Afghanistan, ...
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia...
## $ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992...
## $ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.8...
## $ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 1488...
## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 78...
# melihat variabel year
unique(gapminder$year)
##  [1] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 2002 2007

Dataset gapminder memiliki 6 variabel dan 1704 observasi. 20 observasi pertama dataset gapminder dapat dilihat pada Tabel 1

Table 1: 20 observasi pertama dataset gapminder
country continent year lifeExp pop gdpPercap
Afghanistan Asia 1952 28.801 8425333 779.4453
Afghanistan Asia 1957 30.332 9240934 820.8530
Afghanistan Asia 1962 31.997 10267083 853.1007
Afghanistan Asia 1967 34.020 11537966 836.1971
Afghanistan Asia 1972 36.088 13079460 739.9811
Afghanistan Asia 1977 38.438 14880372 786.1134
Afghanistan Asia 1982 39.854 12881816 978.0114
Afghanistan Asia 1987 40.822 13867957 852.3959
Afghanistan Asia 1992 41.674 16317921 649.3414
Afghanistan Asia 1997 41.763 22227415 635.3414
Afghanistan Asia 2002 42.129 25268405 726.7341
Afghanistan Asia 2007 43.828 31889923 974.5803
Albania Europe 1952 55.230 1282697 1601.0561
Albania Europe 1957 59.280 1476505 1942.2842
Albania Europe 1962 64.820 1728137 2312.8890
Albania Europe 1967 66.220 1984060 2760.1969
Albania Europe 1972 67.690 2263554 3313.4222
Albania Europe 1977 68.930 2509048 3533.0039
Albania Europe 1982 70.420 2780097 3630.8807
Albania Europe 1987 72.000 3075321 3738.9327

5.1 Scatterplot

Scatterplot dapat dibuat pada ggplot2 menggunakan fungsi geom_point(). Format sederhananya dituliskan sebagai berikut:

ggplot(data, aes(...))+
  geom_point(size, color, shape)

Berikut adalah contoh sederhana scatterplot variabel lifeExp terhadap variabel gdpPercap. Output yang dihasilkan disajikan pada Gambar 1:

ggplot(gapminder, aes(gdpPercap, lifeExp))+
  geom_point()
Scatterplot lifeExp vs gdpPercap

Figure 1: Scatterplot lifeExp vs gdpPercap

Kita dapat mengubah warna, jenis, dan ukuran titik pada scatterplot. Pengubahan warna dan jenis titik berguna untuk menunjukkan grup data pada grafik. Sedangkan perubahan ukuran titik sangat berguna untuk menunjukkan nilai variabel lain khususnya variabel kontinyu pada sebuah titik. Berikut adalah contoh penerapannya. Output yang dihasilkan disajikan pada Gambar 2 sampai dengan Gambar 4:

ggplot(gapminder, aes(gdpPercap,lifeExp, color=continent))+
  geom_point()+
  # merubah sumbu x kedalam fungsi log
  scale_x_log10()
Scatterplot lifeExp vs gdpPercap tiap benua (1)

Figure 2: Scatterplot lifeExp vs gdpPercap tiap benua (1)

ggplot(gapminder, aes(gdpPercap,lifeExp, shape=continent))+
  geom_point()+
  # merubah sumbu x kedalam fungsi log
  scale_x_log10()
Scatterplot lifeExp vs gdpPercap tiap benua (2)

Figure 3: Scatterplot lifeExp vs gdpPercap tiap benua (2)

ggplot(gapminder, aes(gdpPercap,lifeExp, 
                      size=pop, color=continent))+
  geom_point()+
  # merubah sumbu x kedalam fungsi log
  scale_x_log10()
Scatterplot lifeExp vs gdpPercap dan populasi tiap negara dan benua

Figure 4: Scatterplot lifeExp vs gdpPercap dan populasi tiap negara dan benua

Untuk menujukkan asosiasi antara dua variabel kontinyu kita juga dapat menambahkan garis regresi dan confidence interval garis regresinya. Fungsi yang digunakan adalah geom_smooth(). Secara default fungsi tersebut akan membuat garis loess regression pada grafik. Agar dapat membuat garis regresi linier kita perlu menambahkan argumen method="lm". Selain itu, jika kita tidak ingin menampilkan garis confidence interval kita dapat menambahkan argumen se=FALSE. Format sederhananya disajikan pada sintaks berikut:

geom_smooth(method="auto", se=TRUE, fullrange=FALSE, level=0.95)

Note:

  • method: metode penghalusan yang digunakan. Nilai yang dapat dimasukkan adalah lm, glm, gam, loess, rlm.

  • method=“loess”: merupakan nilai default pada fungsi dan menghasilkan metode penghalusan loess regression.
  • method=“lm”: menghasilkan metode penghalusan regresi linier. Kita juga dapat melakukan spesifikasi terhadap fungsi persamaan regresi yang digunakan dengan menambahkan argumen formula=y~x….

  • se: nilai logis. Jika TRUE garis confidence interval akan ditampilkan sepanjang garis penghalusan.
  • fullrange: nilai logis. Jika TRUE kecocokan mencakup seluruh plot.
  • level: level confidence interal yang digunakan. Secara default bernilai 0.95.

Berikut adalah contoh sintaks penerapan pada variabel gdpPercap dan lifeExp. Output yang dihasilkan disajikan pada Gambar 5:

ggplot(gapminder, aes(gdpPercap,lifeExp))+
  geom_point()+
  # merubah sumbu x kedalam fungsi log
  scale_x_log10()+
  # menambahkan smoothing method
  geom_smooth(method="lm", level=0.99)
Scatterplot lifeExp vs gdpPercap dengan garis penghalusan regresi linier

Figure 5: Scatterplot lifeExp vs gdpPercap dengan garis penghalusan regresi linier

5.2 Box Plot dan Violin Plot

Box plot merupakan visualisasi yang powerful dalam menggambarkan distribusi data, melihat adanya outlier, serta membandingkan distribusi antar data. Format visualisasi dapat dituliskan sebagai berikut:

ggplot(data, aes(...))+
  geom_boxplot(geom_boxplot(outlier.colour="black", 
                            outlier.shape=16,
                            outlier.size=2, 
                            notch=FALSE))

Note:

  • outlier.colour, outlier.shape, outlier.size: Warna, bentuk dan ukuran untuk titik-titik outlier.
  • notch: nilai logis. Jika TRUE, buat notched box plot. Notch menunjukkan confidence interval di sekitar median yang biasanya didasarkan pada median \(\pm1,58\cdot\frac{\left(IQR\right)}{\sqrt{\left(n\right)}}\). Notch digunakan untuk membandingkan kelompok; jika takik dua kotak tidak tumpang tindih, ini adalah bukti kuat bahwa median berbeda.

Berikut merupakan contoh visualisasi variabel lifeExp pada dataset gapminder. Output yang dihasilkan disajikan pada Gambar 6:

ggplot(gapminder, aes("", lifeExp))+
  geom_boxplot()
Box plot variabel lifeExp

Figure 6: Box plot variabel lifeExp

Kita dapat melakukan visualisasi bagi setiap kelompok data. Pada sintaks berikut visualisasi dilakukan untuk variabel lifeExp pada tiap continent. Pada contoh berikut akan ditampilkan cara menmabahkan titik rata-rata dan warna pada masing-masing grup. Output yang dihasilkan disajikan pada Gambar 7:

ggplot(gapminder, aes(continent, lifeExp, color=continent))+
  geom_boxplot()+
  stat_summary(fun.y=mean, geom="point", 
               shape=23, size=3, color="red")
Box plot variabel lifeExp pada tiap continent

Figure 7: Box plot variabel lifeExp pada tiap continent

Misalkan kita ingin mengetahui perubahan distribusi dari variabel lifeExp pada masing-masing continet pada tahun 1952 dan 2007. Untuk melakukannya kita perlu melakukan subset pada dataset gapminder untuk memfilter data pada tahun 1952 dan 2007. Data selanjutnya dilakukan input kedalam fungsi ggplot(). Berikut adalah contoh sintaks yang digunakan. Output yang dihasilkan disajikan pada Gambar 8:

gapminder %>%
  filter(year==1952 | year==2007) %>%
  ggplot(aes(continent, lifeExp, fill=factor(year)))+
  geom_boxplot(notch=TRUE)
Box plot variabel lifeExp pada tiap continent (1952 dan 2007)

Figure 8: Box plot variabel lifeExp pada tiap continent (1952 dan 2007)

Berdasarkan Gambar 8 terlihat bahwa usia harapan hidup pada tiap benua meningkat sejak tahun 1952 sampai 2007. Selain itu, peningkatan tersebut bersifat signifikan yang ditunjukkan dari tidak adanya notch yang saling overlap pada masing-masing benua.

Untuk lebih detailnya kita akan coba melakukan visualisasi pada benua Asia untuk melihat perubahan variabel lifeExp. Berikut adalah sintaks yang digunakan dan output yang dihasilkan disajikan pada Gambar 9:

gapminder %>%
  filter(continent=="Asia") %>%
  ggplot(aes(factor(year), lifeExp))+
  geom_boxplot()
Box plot variabel lifeExp Benua Asia

Figure 9: Box plot variabel lifeExp Benua Asia

Violin plot memiliki kesamaan dengan box plot. Perbedaanya terletak pada violin plot tidak hanya menyajikan data titik-titikkuartil data, namun violin plot juga menampilkan kernel probabilitas distibusi data. Fungsi yang digunakan untuk membuatnya adalah geom_violin().

Pada dataset gapminder kita ingin meisualisasikan distribusi lifeExp pada masing-masing continent. Berikut adalah contoh sintaks untuk membuat visualisasi dasar violin plot. Output yang dihasilkan disajikan pada Gambar 10:

gapminder %>%
  ggplot(aes(continent, lifeExp, fill=continent))+
  # violin plot
  geom_violin()
Violin plot variabel lifeExp pada masing-masing benua

Figure 10: Violin plot variabel lifeExp pada masing-masing benua

Kita juga dapat melakukan modifikasi terhadap violin plot tersebut seperti penambahan titik kuartil, titik mean dan modifikasi terhadap warna tampilaknnya. COntoh sintaksnya dan output disajikan pada Gambar 11:

gapminder %>%
  ggplot(aes(continent, lifeExp, fill=continent))+
  # violin plot
  geom_violin()+
  # menambahkan boxplot dengan lebar 0.1
  geom_boxplot(width=0.1, fill="white")+
  # menambahkan titik mean
  stat_summary(fun.y=mean, geom="point",
               # ukuran dan jenis titik
               size=1, shape=23,
               # warna titik
               color="red", fill="white")
Violin plot variabel lifeExp pada masing-masing benua (2)

Figure 11: Violin plot variabel lifeExp pada masing-masing benua (2)

5.3 Bar Plot

Pada ggplot2 bar plot dapat dibuat menggunakan fungsi geom_bar(). Untuk membuat bar plot, langkah pertama yang perlu dilakukan adalah membuat tabulasi data variabel terlebih dahulu. Berikut adalah contoh sintaks untuk membuat bar plot dari rata-rata lifeExp pada masing-masing continent. Output yang dihasilkan disajikan pada Gambar 12:

gapminder %>%
  # kelompokkan berdasarkan continet
  group_by(continent)%>%
  # membuat ringkasan data
  summarize(mean_lifeExp=mean(lifeExp))%>%
  # urutkan dari yang terbesar
  arrange(desc(mean_lifeExp))%>%
  # plot
  ggplot(aes(continent, mean_lifeExp))+
  # membuat bar plot berdasarkan nilai observasi
  geom_bar(stat="identity")
Bar plot rata-rata lifeExp masing-masing benua

Figure 12: Bar plot rata-rata lifeExp masing-masing benua

Kita juga dapat membuat bar plot dengan garis confidence interval. Untuk melakukannya kita perlu terlebih dahulu menghitung standard error dari data. Standard error selanjutnya digunakan untuk menghitung nilai atas dan bawah dari nilai rata-rata. Berikut adalah contoh visualisasi bar plot dengan confidence interval (Gambar 13):

gapminder %>%
  # kelompokkan berdasarkan continet
  group_by(continent)%>%
  # membuat ringkasan data
  summarize(mean_lifeExp=mean(lifeExp),
            n=n(), sd=sd(lifeExp), 
            se=sd/sqrt(n))%>%
  # plot
  ggplot(aes(continent, mean_lifeExp))+
  # membuat bar plot
  geom_bar(stat="identity", color="white")+
  # menambahkan error bar
  geom_errorbar(aes(ymin=mean_lifeExp-se,
                    ymax=mean_lifeExp+se),
                width=0.2)
Bar plot rata-rata lifeExp masing-masing benua dengan confidence interval

Figure 13: Bar plot rata-rata lifeExp masing-masing benua dengan confidence interval

Kita juga dapat melakukannya pada visualisasi data beberapa grup. Berikut adalah contoh sintaks dan output (Gambar 14) bar plot dengan beberapa grup:

gapminder %>%
  # filter data tahun 1952 dan 2007
  filter(year==1952|year==2007)%>%
  # Ubah year menjadi factor
  mutate(year=as.factor(year))%>%
  # kelompokkan berdasarkan continet
  group_by(continent,year)%>%
  # membuat ringkasan data
  summarize(mean_lifeExp=mean(lifeExp),
            n=n(), sd=sd(lifeExp), 
            se=sd/sqrt(n))%>%
  # plot
  ggplot(aes(continent, mean_lifeExp, 
             fill=year))+
  # membuat bar plot
  geom_bar(stat="identity", 
           position=position_dodge())+
  # menambahkan error bar
  geom_errorbar(aes(ymin=mean_lifeExp-se,
                    ymax=mean_lifeExp+se),
                width=0.2,
                position=position_dodge(0.9))
Bar plot rata-rata lifeExp masing-masing benua (1952 dan 2007) dengan confidence interval

Figure 14: Bar plot rata-rata lifeExp masing-masing benua (1952 dan 2007) dengan confidence interval

5.4 Line Plot

Line plot dapat digunakan untuk menunjukkan adanya perubahan pada selang waktu tertentu. Pada ggplot2, line plot dapat dibuat menggunakan fungsi geom_line(). Berikut adalah contoh sintaks dan grafik (Gambar 15) untuk membuat line plot:

gapminder%>%
  # kelompokkan data berdasarkan year dan continent
  group_by(year,continent)%>%
  # ringkasan data
  summarize(mean_lifeExp=mean(lifeExp))%>%
  # plot
  ggplot(aes(year, mean_lifeExp, 
             linetype=continent))+
  # membuat line plot
  geom_line()+
  # menambahkan point
  geom_point()
Line plot lifeExp masing-masing benua

Figure 15: Line plot lifeExp masing-masing benua

Kita juga dapat menambahkan error bar pada line plot. Berikut adalah contoh sintak dan grafik (Gambar 16) yang dihasilkan:

gapminder%>%
  # filter benua asia
  filter(continent=="Asia")%>%
  # kelompokkan data berdasarkan year dan continent
  group_by(year)%>%
  # ringkasan data
  summarize(mean_lifeExp=mean(lifeExp), 
            sd=sd(lifeExp))%>%
  # plot
  ggplot(aes(year, mean_lifeExp))+
  # membuat line plot
  geom_line()+
  # menambahkan point
  geom_point(size=2)+
  # menambahkan error bar
  geom_errorbar(aes(ymin=mean_lifeExp-sd,
                    ymax=mean_lifeExp+sd),
                width=0.2, color="red")
Histogram lifeExp

Figure 16: Histogram lifeExp

5.5 Pie Chart

Pie chart pada ggplot2 dapat dibuat menggunakan fungsi geom_bar() dan coord_polar().Berikut adalah contoh sintaks yang digunakan dan output (Gambar 17) yang dihasilkan:

total <- sum(gapminder$pop)
gapminder%>%
  # kelompokkan berdasarkan continent
  group_by(continent)%>%
  # ringkasan data 
  summarize(pop=sum(as.numeric(pop)), percent=(pop/total)*100)%>%
  ggplot(aes(x="", percent, fill=continent))+
  geom_bar(stat="identity")+
  coord_polar("y", start=0)
Pie chart pop

Figure 17: Pie chart pop

5.6 Histogram dan Desity Plot

Histogram pada ggplot2 dapat dibuat dengan fungsi geom_histogram(). Berikut adalah sintaks untuk membuat hitogram pada variabel lifeExp. Output yang dihasilkan disajikan pada Gambar 18:

gapminder %>%
  ggplot(aes(lifeExp))+
  geom_histogram()
Histogram lifeExp

Figure 18: Histogram lifeExp

Kita dapat membuat grafik histogram berdasarkan grup data. Pada contoh sebelumnya dibuat histogram berdasarkan variabel continent. Berikut adalah sintaks dan output yang dihasilkan pada Gambar 19:

gapminder %>%
  ggplot(aes(lifeExp, fill=continent))+
  geom_histogram(alpha=0.5, 
                 # atur posisi agar sesuai grup
                 position="identity",
                 color="black")
Histogram lifeExp berdasarkan benua

Figure 19: Histogram lifeExp berdasarkan benua

Density plot dapat dibuat dengan menggunakan fungsi geom_density(). Berikut adalah contoh sintaks untuk membuat density plot variabel lifeExp. Output yang dihasilkan disajikan pada Gambar 20:

gapminder %>%
  ggplot(aes(lifeExp))+
  geom_density()
Density plot lifeExp

Figure 20: Density plot lifeExp

Kita juga dapat membuat grafik density berdasarkan grup data. Pada contoh sebelumnya dibuat density plot berdasarkan variabel continent. Berikut adalah sintaks dan output yang dihasilkan pada Gambar 21:

gapminder %>%
  ggplot(aes(lifeExp, fill=continent))+
  geom_density(alpha=0.5, 
                 # atur posisi agar sesuai grup
                 position="identity",
                 color="black")
Density plot lifeExp berdasarkan benua

Figure 21: Density plot lifeExp berdasarkan benua

Jika dinginkan kita juga dapat menambahkan density plot pada histogram. Pada Gambar 18 ditambahkan density plot sehingga dihasilkan output seperti Gambar 22.

gapminder %>%
  ggplot(aes(lifeExp))+
  geom_histogram(aes(y=..density..),
                 # spesifikasi warna bar
                 color="black", fill="white")+
  geom_density(fill="red", alpha=0.3)
histogram dan density plot lifeExp

Figure 22: histogram dan density plot lifeExp

5.7 QQ Plot

QQ plot pada paket ggplot2 dapat dibuat dengan menggunakan fungsi stat_qq(). Berikut adalah contoh sintaks untuk melakukannya. Output yang dihasilkan disajikna pada Gambar 23.

ggplot(gapminder, aes(sample=lifeExp))+
  # qq plot
  stat_qq()+
  # garis referensi
  stat_qq_line()
QQ plot variabel lifeExp

Figure 23: QQ plot variabel lifeExp

5.8 Dot Plot

Dot plot dapat dibuat menggunakan fungsi geom_dotplot atau geom_jitter(). Perbedaan keduanya adalah geom_jitter() menambahkan noise pada plot sehingga mencegah terjadinya overplotting. Berikut adalah contoh sintaks untuk membuat dotplot pada multiple group dan output yang dihasilkan pada Gambar 24:

gapminder %>%
  filter(year==1952 | year==2007) %>%
  ggplot(aes(continent, lifeExp, fill=factor(year)))+
  geom_dotplot(binaxis="y", 
               # spesifikasi posisi plot
               stackdir="center",
               position=position_dodge(0.8),
               size=0.1)
## Warning: Ignoring unknown parameters: size
Dot plot variabel lifeExp masing-masing benua (1952-2007)

Figure 24: Dot plot variabel lifeExp masing-masing benua (1952-2007)

Kita juga dapat menambahkan plot dari dari plot yang sudah ada seperti box plot atau violin plot. Berikut adalah contoh sintaks dan output yang dihasilkan pada Gambar 25:

gapminder %>%
  filter(year==1952 | year==2007) %>%
  ggplot(aes(continent, lifeExp, fill=factor(year)))+
  # box plot dibawah
  geom_boxplot(position=position_dodge(0.8))+
  # dot plot diatas
  geom_dotplot(binaxis="y", 
               # spesifikasi posisi plot
               stackdir="center",
               position=position_dodge(0.8))
Dot plot variabel lifeExp masing-masing benua (1952-2007) (2)

Figure 25: Dot plot variabel lifeExp masing-masing benua (1952-2007) (2)

5.9 ECDF Plot

Empirical Cumulative Density FUnction (ECDF) plot merupakan grafik yang digunakan untuk menggambarkan ditribusi suatu data. Dari grafik ini kita dapat mengetahui faraksi suatu data baik yang terendah maupun yang tertinggi. ECDF pada ggplot2 dapat dibuat dengan dua cara yaitu dengan geom_line() dan stat_ecdf(). Jika menggunakan fungsi geom_line() kita perlu membuat fraksi kumulatif dari variabel yang akan kita plotkan. Sedangkan dengan menggunakan stat_ecdf(), kita tidak perlu melakukannya karena fungsi tersebut akan secara otomatis memproses data kita. Berikut adalah sintaks dan output (Gambar 26) contoh ecdf:

ggplot(gapminder, aes(lifeExp))+
  stat_ecdf(geom="line")
ECDF plot variabel lifeExp

Figure 26: ECDF plot variabel lifeExp

5.10 Parameter Grafik

Pada bagian ini penulis akan menjelaskan bagaimana cara mengatur parameter grafik seperti judul grafik, legend, warna, tema, dll. Pengaturan parameter grafik pada ggplot2 sebenarnya jauh lebih sederhana dibandingkan dengan fungsi dasar visualisasi R. Selain itu, kita dapat membuat tampilan grafik kita jauh lebih menarik dengan membuat tema kustom pada grafik kita.

5.10.1 Merubah Judul Grafik, Keterangan Axis dan Legend

Untuk merubah judul grafik dan keterangan axis kita dapat melakukannya melalui dua cara. Cara pertama adalah dengan memasukkan mengubahnya satu persatu menggunakan fungsi ggtitle() (judul grafik), xlab() (keterangan sumbu x), dan ylab() (keterangan pada sumbu y). Cara kedua adalah dengan menggunakan fungsi labs() dimana selain dapat mengubah judul grafik dan keterangan axis fungsi tersebut dapat juga digunakan untuk mengubah keterangan legend.

Pada sintaks berikut penulis akan memberikan contoh bagaimana mengubah judul grafik dan keterangan axis menggunakan dua cara tersebut. Output yang dihasilkan disajikan pada Gambar 27.

# Cara 1
ggplot(gapminder, aes(continent, gdpPercap, fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # menambahkan judul
  ggtitle("GDP Per Capita Tiap Benua")+
  # mengubah keterangan axis
  xlab("Benua")+
  ylab("GDP Per Kapita")
# cara 2
ggplot(gapminder, aes(continent, gdpPercap, fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita")
Mengubah judul grafik dan keterangan axis

Figure 27: Mengubah judul grafik dan keterangan axis

Pada Gambar 27 kita belum mengubah keterangan legend. Berikut adalah sintaks untuk mengubah keterangan legend pada grafik tersebut beserta output yang disajikan pada Gambar 28.

# cara 2
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua")
Mengubah keterangan legend pada grafik

Figure 28: Mengubah keterangan legend pada grafik

Judul, keterangan axis, dan keterangan legend dapat dikustomisasi menggunakan fungsi theme() dan element_text(). Berikut adalah format yang digunakan:

# Judul
<ggplot> + theme(plot.title = element_text(family, face, colour, size))
# keterangan sumbu x
<ggplot> + theme(axis.title.x = element_text(family, face, colour, size))
# keterangan sumbu y
<ggplot> + theme(axis.title.y = element_text(family, face, colour, size))
# keterangan legend
<ggplot> + theme(axis.title.y = element_text(family, face, colour, size))

Note:

  • family: font family.
  • face: tampilan font. Nilai yang dapat digunakan antara lain: “plain”, “italic”, “bold” dan “bold.italic”.
  • colour: warna teks.
  • size: ukuran teks

Berikut adalah contoh penerapan fungsi tersebut pada grafik Gambar 28. Output yang dihasilkan disajikan pada Gambar 29.

# cara 2
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua")+
  theme(
      plot.title = element_text(color="red", size=14, face="bold.italic"),
      axis.title.x = element_text(color="blue", size=14, face="bold"),
      axis.title.y = element_text(color="#993333", size=14, face="bold"),
      legend.text = element_text(colour="blue", size=10, face="bold")
      )
Kustomisasi judul grafik dan keterangan axis

Figure 29: Kustomisasi judul grafik dan keterangan axis

5.10.2 Merubah Tampilan dan Posisi Legend

Posisi legend dapat diubah dengan menambahkan argumen legend.position pada fungsi theme(). Posisi legend dapat diubah dengan memasukkan nilai berupa karakter seperti “left”,“top”, “right”, dan “bottom”. Selain itu, posisi legend dapat dispesifikasi menggunakan vektor numerik c(x,Y). Nilai x dan y berkisar antara 0 sampai 1. Nilai c(0,0) menandakan posisi legend pada bagian kiri bawah dan c(0,1) menyatakan kiri atas.

Penggunaan karakter dan vektor numerik akan menghasilkan output posisi legend yang berbeda. Jika menggunakan karakter posisi legend akan diubah diluar bidang plot. Sedangkan vektor numerik akan mengubah posisi legend menjadi ada pada bidang plot. Untuk lebih memahaminya berikut disajikan dua buah gambar. Gambar 30 menyajikan pengaturan legend menggunakan karakter, sedangkan Gambar 31 menyajikan pengaturan legend menggunakan vektor numerik.

# cara 2
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua")+
  theme(legend.position="top")
Kustomisasi posisi legend berdasarkan karakter

Figure 30: Kustomisasi posisi legend berdasarkan karakter

# cara 2
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua")+
  theme(legend.position=c(0.9,0.75))
Kustomisasi posisi legend berdasarkan vektor numerik

Figure 31: Kustomisasi posisi legend berdasarkan vektor numerik

Pada fungsi theme() kita juga dapat merubah backgroud dari legend box menggunakan argumen legend.bacground dan element_rect. Selain itu kita juga dapat mengubah orientasi dari legend yang semula vertikal menjadi horizontal dengan menambahkan argumen legend.box. Berikut adalah contoh sintaks penerapannya. Output yang dihasilkan disajikan pada Gambar 32.

# cara 2
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent,
                      # warna outline berdasarkan benua
                      color=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua (fill)",
       color="Benua (outline)")+
  theme(legend.position="bottom",
        # mengubah tampilan legend box 
        legend.background = element_rect(fill="lightblue",
                                  size=0.5, linetype="solid", 
                                  colour ="darkblue"),
        # mengubah orientasi legend
        legend.box= "horizontal")
Kustomisasi tampilan legend

Figure 32: Kustomisasi tampilan legend

Kita dapat juga menghilangkan legend baik seluruh legend maupun legend spesifik. Pada Gambar 33 dan Gambar 34 disajikan contoh cara menghilangkan seluruh legend maupun sebagian legend.

# Menghilangkan seluruh legend
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent,
                      # warna outline berdasarkan benua
                      color=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua")+
  theme(legend.position="none")
Menghilangkan seluruh legend

Figure 33: Menghilangkan seluruh legend

# Menghilangkan seluruh legend
ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna box berdasarkan benua
                      fill=continent,
                      # warna outline berdasarkan benua
                      color=continent))+
  # membuat box plot
  geom_boxplot()+
  # kustomisasi judul dan keterangan axis
  labs(title="GDP Per Capita Tiap Benua",
       x="Benua", y="GDP Per Kapita",
       # mengubah keterangan legend
       fill="Benua (fill)",
       color="Benua (outline)")+
  theme(legend.position="bottom",
        # mengubah tampilan legend box 
        legend.background = element_rect(fill="lightblue",
                                  size=0.5, linetype="solid", 
                                  colour ="darkblue"))+
  # Menghilangkan legend Benua (outline)
  guides(color=FALSE)
Menghilangkan sebagian legend legend

Figure 34: Menghilangkan sebagian legend legend

5.10.3 Merubah Warana Pada Grafik Secara Otomatis dan Manual

Kita dapat merubah warna grafik baik secara otomatis dan manual. Secara otomatis warna dapat diubah dengan memasukkan nama variabel kedalam argumen fill dan color. Namun, jika kita inginkan kita dapat memasukkan kode warna untuk memperoleh warna yang seragam pada seluruh kelompok data.

Pada contoh sintaks berikut diberikan contoh bagaimana merubah warna pada seluruh grup data dengan satu warna yang seragam. Output yang dihasilkan disajikan pada Gambar 35:

ggplot(gapminder, aes(continent, lifeExp))+
  # spesifikasi warna tunggal
  geom_boxplot(color="darkred",fill="#A4A4A4")
Merubah warna grup berdasarkan satu warna

Figure 35: Merubah warna grup berdasarkan satu warna

Selain itu, kita dapat mengubah warna berdasarkan grup baik secara otomatis maupun manual. Berikut adalah contoh sintaks warna berdasarkan grup secara otomatis. Output yang dihasilkan disajikan pada Gambar 36.

ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna berdasarkan grup
                      fill=continent))+
  geom_boxplot()
Merubah warna grup secara otomatis

Figure 36: Merubah warna grup secara otomatis

Kita dapat mengatur pecahayaan (l) dan intensitas warna (c) dari warna yang kita tampilkan menggunakan fungsi scale_fill_hue(). Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 37.

ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna berdasarkan grup
                      fill=continent))+
  geom_boxplot()+
  # merubah l dan c
  scale_color_hue(l=40, c=35)
Merubah pencahayaan dan intensitas warna

Figure 37: Merubah pencahayaan dan intensitas warna

Jika kita tidak menginginkan warna yang secara otomatis ditampilkan oleh ggplot2, kita dapat mengubahnya secara manual menggunakan fungsi scale_fill_manual() (untuk box plot, bar plot, dll) dan scale_color_manual() (untuk line plot, dot plot dan scatterplot). Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 38.

ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna berdasarkan grup
                      fill=continent))+
  geom_boxplot()+
  # merubah warna secara manual
  scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9",
                             "#B47846","#B4464B"))
Merubah warna secara manual

Figure 38: Merubah warna secara manual

JIka kita tidak hafal dengan kode hexadesimal warna tersebut kita dapat juga menggunakan palet warna. Contoh palet warna yang akan digunakan adalah dari library RColorBrewer. Berikut adalah contoh sintaks untuk menginstal dan memuat paket tersebut:

# memasang paket
# install.packages("RColorBrewer")

# memuat paket
library(RColorBrewer)

Pada sintak berikut penulis akan menampilkan seluruh palet warna pada pekt tersebut. Output yang dihasilkan disajikan pada Gambar 39.

display.brewer.all()
Palet warna RColorBrewer

Figure 39: Palet warna RColorBrewer

Pada Gambar 39 terdapat 3 jenis warna antara lain:

  1. Sequential palettes, digunakan untuk menunjukkan urutan dari rendah ke tinggi atau gradien. Nama palet yang ada antara lain: Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu YlOrBr,dan YlOrRd.
  2. Diverging palettes, digunakan untuk menunjukkan perubahan pada data yang memiliki nilai positif dan negatif. Palet yang tersedia antara lain: BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, dan Spectral.
  3. Qualitative palettes, digunakan untuk merepresentasikan variabel nominal atau kategori karena tidak menunjukkan besaran atau perbedaan nilai antar grup. Palete yang tersedia antara lain: Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, dan Set3.

Pada contoh sintaks berikut disajikan contoh penerapan dan output yang dihasilkan pada Gambar 40.

ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna berdasarkan grup
                      fill=continent))+
  geom_boxplot()+
  # merubah warna menggunakan palet
  scale_color_brewer(palette="Dark2")
Merubah warna menggunakan palet

Figure 40: Merubah warna menggunakan palet

Jika kita tidak menginginkan warna-warna terang, kita dapat menggunakan fungsi scale_color_grey() (untuk line plot, dot plot, dan scatterplot) dan scale_fill_grey() (untuk bar plot, histogram, box plot, dll). Funsi tersebut akan memberikan warna palet gray pada plot. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 41.

ggplot(gapminder, aes(continent, gdpPercap, 
                      # warna berdasarkan grup
                      fill=continent))+
  geom_boxplot()+
  # merubah warna menggunakan palet
  scale_fill_grey()
Merubah warna menggunakan palet gray

Figure 41: Merubah warna menggunakan palet gray

5.10.4 Kustomisasi Titik

Untuk mengubah jenis titik pada scatterplot, outlier pada box plot, dan dot plot, kita dapat menambahkan argumen shape pada fungsi geometrinya. Nilai yang mungkin dimasukkan berupa nilai diskrit yang berkisar antara 0 sampai 25. Selain itu, ukuran dari titik dapat diinput dengan menambahkan argumen size. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 42.

ggplot(gapminder, aes(gdpPercap, lifeExp))+
  # spesifikasi jenis, ukuran dan warna titik
  geom_point(shape=4, size=2, color="blue")
Kustomisasi jenis, ukuran dan warna titik

Figure 42: Kustomisasi jenis, ukuran dan warna titik

Untuk data dengan multiple group, kita dapat mengubah jenis, ukuran dan warna secara otomatis dengan memasukkan nama variabel kedalam argumen shape, size dan color. Sedangkan secara manual kita dapat menambahkan fungsi scale_shape_manual() (jenis titik), scale_color_manual() (warna titik), dan scale_size_manual() (ukuran titik). Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 43 dan Gambar 44.

# cara otomatis
ggplot(gapminder, aes(gdpPercap, lifeExp,
                      # spesifikasi jenis, ukuran dan warna
                      shape=continent, color=continent,
                      size=pop))+
  geom_point()
Kustomisasi jenis, ukuran dan warna titik untuk multiple group secara otomatis

Figure 43: Kustomisasi jenis, ukuran dan warna titik untuk multiple group secara otomatis

# cara manual
ggplot(gapminder, aes(gdpPercap, lifeExp,
                      # spesifikasi jenis, ukuran dan warna
                      shape=continent, color=continent,
                      size=pop))+
  geom_point()+
  scale_shape_manual(values=c(1:5))+
  scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9",
                             "#B47846","#B4464B"))
Kustomisasi jenis, ukuran dan warna titik untuk multiple group secara manual

Figure 44: Kustomisasi jenis, ukuran dan warna titik untuk multiple group secara manual

5.10.5 Kustomisasi Jenis Garis

Jenis, warna dan ukuran garis dapat diatur dengan menambahkan argumen linetype, size dan color. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 45.

gapminder%>%
  filter(continent=="Asia")%>%
  group_by(year)%>%
  summarize(mean_pop=mean(pop))%>%
  # plot
  ggplot(aes(year, mean_pop))+
    geom_line(linetype="dashed", color="blue",
              size=1)+
    geom_point(shape=1, color="red")
Kustomisasi jenis, ukuran dan warna garis

Figure 45: Kustomisasi jenis, ukuran dan warna garis

Untuk data dengan multiple group, kita dapat mengubah jenis garis, warna dan ukuran secara manual maupun secara otomatis. Secara otomatis kita dapat menginputkan nama variabel kedalam argumen linetype, size dan color. Secara manual, kita dapat mengubah jenis, warna dan ukuran menggunakan fungsi scale_linetype_manual() (jenis garis), scale_color_manual() (warna garis), dan scale_size_manual() (ukuran garis). Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 46 dan Gambar 47.

# cara otomatis
gapminder%>%
  filter(continent %in% c("Asia","Africa"))%>%
  group_by(year, continent)%>%
  summarize(mean_pop=mean(pop))%>%
  # plot
  ggplot(aes(year, mean_pop,
             linetype=continent,
             color=continent))+
    geom_line()+
    geom_point(shape=1, color="red")
Kustomisasi jenis, ukuran dan warna garis untuk multiple group secara otomatis

Figure 46: Kustomisasi jenis, ukuran dan warna garis untuk multiple group secara otomatis

# cara manual
gapminder%>%
  filter(continent %in% c("Asia","Africa"))%>%
  group_by(year, continent)%>%
  summarize(mean_pop=mean(pop))%>%
  # plot
  ggplot(aes(year, mean_pop,
             linetype=continent,
             color=continent))+
    geom_line()+
    geom_point(shape=1, color="red")+
    scale_linetype_manual(values=c("dotted", "twodash"))+
    scale_color_manual(values=c("red","blue"))
Kustomisasi jenis, ukuran dan warna garis untuk multiple group secara manual

Figure 47: Kustomisasi jenis, ukuran dan warna garis untuk multiple group secara manual

5.10.6 Menambahkan Label Pada Titik Observasi dan Bidang Plot

Pada artikel ini penulis akan menjelaskan bagaimana kita dapat menambahkan teks pada plot. Fungsi-fungsi yang dapat digunakan antara lain:

  • geom_text(): menambahkan teks secara langsung pada plot.
  • geom_label(): menambahkan teks dengan kotak disekelilingnya.
  • annotate(): menambahkan teks tertentu pada bagian tertentu bidang plot.
  • annotation_custom(): menambahkan anotasi statik yang sama pada setiap panel.

Misal kita akan membuat plot antara variabel pop vs gdpPercap seperti yang ditunjukkan pada Gambar 48 berikut:

ggplot(gapminder, aes(gdpPercap, pop))+
  geom_point()
Scatterplot variabel pop vs gdpPercap

Figure 48: Scatterplot variabel pop vs gdpPercap

Misalkan kita ingin menandai negara yang memiliki gdpPercap > 50000. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 49.

ggplot(gapminder, aes(gdpPercap, pop))+
  geom_point(shape=1)+
  geom_label(
    # subset data sesua kriteria
    data=subset(gapminder,gdpPercap>50000),
    # label berdasarkan kriteria
    aes(label=country),
    # ukuran teks
    size = 3)
Scatterplot variabel pop vs gdpPercap dengan label

Figure 49: Scatterplot variabel pop vs gdpPercap dengan label

Selain teks yang menunjukkan observasi, kita dapat menambahkan anotasi pada grafik. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 50.

ggplot(gapminder, aes(gdpPercap, pop))+
  geom_point(shape=1)+
  # menambahkan label sesuai kriteria data
  geom_label(
    # subset data sesua kriteria
    data=subset(gapminder,gdpPercap>50000),
    # label berdasarkan kriteria
    aes(label=country),
    # ukuran teks
    size = 3)+
  annotate(geom="text", x=90000,
          y=2e+08, label="outlier",
          color="red")
Scatterplot variabel pop vs gdpPercap dengan label dan notasi

Figure 50: Scatterplot variabel pop vs gdpPercap dengan label dan notasi

Kita dapat pula menambahkan teks statik yang sama pada setiap panel. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 51.

library(grid)

# membuat teks
d <- grob <- grobTree(textGrob("Scatter plot", x=0.1,  y=0.95, hjust=0,
  gp=gpar(col="red", fontsize=13, fontface="italic")))

# plot
ggplot(gapminder, aes(gdpPercap, pop))+
  geom_point(shape=1)+
  # menambahkan anotasi
  annotation_custom(d)+
  # membagi plot menjadi beberapa panel
  facet_wrap(~continent, scales="free")
Scatterplot variabel pop vs gdpPercap dengan label dan notasi pada tiap panel

Figure 51: Scatterplot variabel pop vs gdpPercap dengan label dan notasi pada tiap panel

5.10.7 Kustomisasi Tema Pada Plot

Kita dapat melakukan kustomisasi tema plot untuk membuat tampilan plot kita lebih menarik. Pada bagian ini penulis akan membahas tema yang dapat digunakan serta cara untuk melakukan edit terhadap tema yang telah ada sebelumnya.

Tema-tema yang telah terpasang secara defautl pada paket ggplot2 antara lain:

  • theme_gray: backround dengan warna abu-abu dengan garis grid putih.
  • theme_bw: background putih dan garis grid berwarna abu-abu.
  • theme_linedraw: garis hitam di sekeliling bidang plot.
  • theme_light: garis grid dan axis berwarna abu-abu terang.
  • theme_minimal: tidak memiliki frame disekeliling bidang plot.
  • theme_classic: tidak ada garis grid dan axis.
  • theme_void: tema kosong
  • theme_dark: background gelap.

Pada contoh berikut disajikan sebagian contoh penerapan tema pada plot. Output yang dihasilkan pada Gambar 52.

ggplot(gapminder, aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_bw()
Scatterplot dengan tema black and white

Figure 52: Scatterplot dengan tema black and white

Kita juga dapat menggunakan tema kustom yang terdapat pada library ggthemes. Berikut adalah sintaks yang digunakan untuk menginstall dan memuat paket tersebut:

# Memasang paket
install.packages("ggthemes")
# memuat paket
library(ggthemes)
## Warning: package 'ggthemes' was built under R version 3.5.3

tema-tema yang tersedia pada paket tersebut antara lain:

  • theme_tufte: tema minimalis.
  • theme_economist: tema yang digunakan pada majalah Economist.
  • theme_stata: tema yang digunakan pada visualisasi progra stata.
  • theme_wsj: tema yang digunakan pada Wall Street Journal.
  • theme_cal: tema yang digunakan pada LibreOffice Calc dan Google Docs.
  • theme_hc: tema yang didasarkan pada Highcharts JS.

Pada contoh berikut disajikan sebagian contoh penerapan tema pada plot. Output yang dihasilkan pada Gambar 53.

ggplot(gapminder, aes(gdpPercap, lifeExp, 
                      color=continent))+
  geom_point()+
  theme_wsj()
Scatterplot dengan tema Wall Street Journal

Figure 53: Scatterplot dengan tema Wall Street Journal

Kita dapat juga membuat tema kustom berdasarkan tema yang telah ada. Untuk melakukannya kita hanya perlu merubah sejumlah argument default yang ada pada fungsi tema dan menamai tema sesuai dengan yang kita inginkan menggunakan user define function. Berikut adalah contoh argumen yang dapat diubah pada theme_wsj.

theme_wsj
## function (base_size = 12, color = "brown", base_family = "sans", 
##     title_family = "mono") 
## {
##     colorhex <- ggthemes::ggthemes_data$wsj$bg[color]
##     theme_foundation(base_size = base_size, base_family = base_family) + 
##         theme(line = element_line(linetype = 1, colour = "black"), 
##             rect = element_rect(fill = colorhex, linetype = 0, 
##                 colour = NA), text = element_text(colour = "black"), 
##             title = element_text(family = title_family, size = rel(2)), 
##             axis.title = element_blank(), axis.text = element_text(face = "bold", 
##                 size = rel(1)), axis.text.x = element_text(colour = NULL), 
##             axis.text.y = element_text(colour = NULL), axis.ticks = element_line(colour = NULL), 
##             axis.ticks.y = element_blank(), axis.ticks.x = element_line(colour = NULL), 
##             axis.line = element_line(), axis.line.y = element_blank(), 
##             legend.background = element_rect(), legend.position = "top", 
##             legend.direction = "horizontal", legend.box = "vertical", 
##             panel.grid = element_line(colour = NULL, linetype = 3), 
##             panel.grid.major = element_line(colour = "black"), 
##             panel.grid.major.x = element_blank(), panel.grid.minor = element_blank(), 
##             plot.title = element_text(hjust = 0, face = "bold"), 
##             plot.margin = unit(c(1, 1, 1, 1), "lines"), strip.background = element_rect())
## }
## <bytecode: 0x0000000019a56b20>
## <environment: namespace:ggthemes>

Berdasarkan output yang disajikan kita dapat merubah sejumlah argumen seperti base size, color, base_family, dll.

5.10.8 Penskalaan dan Transformasi Axis

Pada bagian ini penulis akan menjelaskan bagaimana cara melakukan modifikasi terhadap sumbu x dan y seperti menetapkan limit nilai maksimum dan minimum axis serta melakukan transformasi pada tiap axis.

Untuk mengatur rentang nilai axis, kita dapat melakukannya dengan fungsi sebagai berikut:

  • xlim() dan ylim(): mengatur limit aksis sumbu x dan y.
  • expand_limits(): mengatur limit sumbu x dan y sekaligus dapat mengatur intercept kedua sumbu tersebut.
  • scale_x_continous() dan scale_y_continous(): megatur limit axis termasuk axis tick dan label.

Pada contoh berikut akan disajikan cara mengatur limit axis dengan menggunakan xlim() dan ylim() serta menggunakan expand_limits(). Output yang dihasilkan disajikan pada Gambar 54.

gapminder%>%
  filter(continent=="Europe")%>%
  ggplot(aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_wsj(base_size=7)+
  labs(title="GDP per Capita vs Life Expectancy",
       y="Life Expectancy",
       x="GDP per Capita (US Dollar)")+
  # mengatur limit axis
  expand_limits(x=c(0, 55000), y=c(0, 90))
# atau
gapminder%>%
  filter(continent=="Europe")%>%
  ggplot(aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_wsj(base_size=7)+
  labs(title="GDP per Capita vs Life Expectancy",
       y="Life Expectancy",
       x="GDP per Capita (US Dollar)")+
  # mengatur limit axis
  xlim(0,55000)+
  ylim(0,90)
Scatterplot dengan axis limits

Figure 54: Scatterplot dengan axis limits

Kita juga dapat menggunakan fungsi scale_x_continuous() dan scale_y_continuous() untuk mengatur limit axis ,axis tick dan label. Format yang digunakan adalah sebagai berikut:

scale_x_continuous(name, breaks, labels, limits, trans)
scale_y_continuous(name, breaks, labels, limits, trans)

Note:

  • name: label axis sumbu x dan y.
  • breaks: untuk mengontrol jeda dalam panduan (axis tick, garis grid, …). Di antara nilai-nilai yang mungkin, adalah sebagai berikut:

  • NULL: menyembunyikan seluruh breaks.
  • waiver(): komputasi break default.
  • vektor numerik atau karakter untuk menspesifikasikan break yang akan ditampilkan.

  • labels: label axis. Nilai yang dapat dimasukkan antara lain;
  • NULL: tanpa label.
  • waiver(): label default.
  • vektor karakter yang digunakan untuk spesifikasi label break.

  • limits: vektor numerik untuk spesifikasi limit sumbu x dan y.
  • trans: transformasi axis. Nilai yang dapat digunakan adalah “log2”, “log10”, dll.

Pada contoh berikut disajikan contoh mengatur limit axis dan label axis menggunakan fungsi scale_x_continous() dan scale_y_continous(). Grafik yang dihasilkan akan tampak seperti Gambar 55.

# atau
gapminder%>%
  filter(continent=="Asia")%>%
  ggplot(aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_wsj(base_size=7)+
  ggtitle("GDP per Capita vs Life Expectancy")+
  # spesifikasi limit dan label axis
  scale_x_continuous(name="GDP per Capita", 
                     limits=c(0, 125000))+
  scale_y_continuous(name="Life Expectancy",
                     limits=c(0,100))
Scatterplot dengan axis limits (2)

Figure 55: Scatterplot dengan axis limits (2)

Tranformasi axis dapat dilakukan dengan fungsi bawaan dari ggplot2. Fungsi transformasi bawaan berupa transformasi log dan sqrt. Berikut adalah fungsi bawaan untuk transformasi tersebut:

  • scale_x_log10() dan scale_y_log10(): transformasi log basis 10.
  • scale_x_sqrt() dan scale_y_sqrt(): transformasi akar kuadrat.
  • scale_x_reverse() dan scale_x_reverse(): membalikkan koordinat.
  • coord_trans(x=“log10”, y=“log10”): memungkinkan transformasi untuk kedua axis sesuai fungsi yang diinputkan pada sumbu x dan sumbu y seperti “log2”, “log10”, “sqrt”, dll.
  • scale_x_continuous(trans=“log2”) dan scale_y_continuous(trans=“log2”): nilai lain yang dapat diinputkan adalah “log10”.

Pada contoh berikut disajikan contoh transformasi sumbu x menggunakan fungsi scale_x_log10(). Grafik yang dihasilkan akan tampak seperti Gambar 56.

# atau
gapminder%>%
  filter(continent=="Europe")%>%
  ggplot(aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_wsj(base_size=7)+
  labs(title="log(GDP per Capita) vs Life Expectancy",
       y="Life Expectancy",
       x="GDP per Capita (US Dollar)")+
  # transformasi sumbu x
  scale_x_log10()
Scatterplot dengan transformasi axis

Figure 56: Scatterplot dengan transformasi axis

Tick mark pada axis juga dapat kita atur menggunakan fungsi scale_x_continous() dan scale_y_continous(). Untuk mengubah format dan label tick mark kita perlu menginstall dan memuat library scales yang berfungsi untuk mengakses fungsi pada argumen break. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 57.

# memasang paket
# install.packages("scales")

# memuat paket
library(scales)
## Warning: package 'scales' was built under R version 3.5.3
# plot
ggplot(gapminder, aes(gdpPercap, lifeExp))+
  geom_point()+
  theme_bw()+
  # kustomisasi tick mark sumbu y
  scale_y_continuous(trans= log2_trans(),
                     breaks=trans_breaks("log2", function(x) 2^x),
                     labels= trans_format("log2", math_format(2^.x)))+
  # kustomisasi sumbu x
  scale_x_continuous(labels = dollar)
Scatterplot dengan transformasi tick mark axis

Figure 57: Scatterplot dengan transformasi tick mark axis

5.10.9 Kustomisasi Tick Mark Axis

Pada bagian ini pembaca akan mempelajari bagaimana melakukan kustomisasi tampilan tick mark. Selain itu kita juga akan belajar bagaimana melakukan pengaturan pada garis axis.

Warna, ukuran font, dan tampilan font (font style) pada tick mark dapat diubah menggunakan fungsi theme() dan element_text(). Format yang digunakan adalah sebagai berikut:

# x axis tick mark labels
<plot> + theme(axis.text.x= element_text(family, face, colour, size, angle))
# y axis tick mark labels
<plot> + theme(axis.text.y = element_text(family, face, colour, size, angle))

Note:

  • family: font family, seperti: “sans”,“times new roman”, dll.
  • face: font face, nilai yang mungkin adalah “plain”, “italic”, “bold” dan “bold.italic”.
  • color: warna teks.
  • size: ukuran teks dalam satuan pts.
  • angle: sudut kemiringan teks berkisar antara 0 sampai 360.

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 58.

ggplot(gapminder, aes(continent, gdpPercap,
                      fill=continent))+
  geom_boxplot()+
  theme_economist()+
  scale_fill_economist()+
  # kustomisasi tick mark
  theme(axis.text.x = element_text(face="bold", 
                                   color="#993333",
                                   size=10, 
                                   angle=30),
          axis.text.y = element_text(face="bold", 
                                     color="#993333",
                                     size=10, 
                                     angle=30))
Mengubah tampilan dari tick mark

Figure 58: Mengubah tampilan dari tick mark

Untuk menonaktifkan tick mark pada plot kita dapat menggunakan fungsi element_blank(). Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 59.

ggplot(gapminder, aes(continent, gdpPercap,
                      fill=continent))+
  geom_boxplot()+
  theme_stata()+
  scale_fill_stata()+
  # menyembunyikan tick mark dan tick mark label
  theme(axis.text.x=element_blank(),
  axis.text.y=element_blank(),
  axis.ticks=element_blank())
Menyembunyikan tampilan dari tick mark

Figure 59: Menyembunyikan tampilan dari tick mark

Kita dapat melakukan pengaturan terhadap garis axis menggunakan argumen axis.lines dan fungsi element_line. Berikut adalah format yang digunakan:

<plot> + theme(axis.line = element_line(color,size, linetype,
                                        lineend, color))

Note:

  • color: warna garis.
  • size: ukuran garis.
  • linetype: jenis garis.
  • lineend: akhir dari garis. Nilai yang dapat dimasukkan antara lain: “round”, “butt” atau “square”.

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 60.

ggplot(gapminder, aes(continent, gdpPercap,
                      fill=continent))+
  geom_boxplot()+
  theme_wsj()+
  scale_fill_wsj()+
  # kustomisasi garis axis
  theme(axis.line = element_line(colour = "darkblue", 
                      size = 1, linetype = "solid"))
Kustomisasi tampilan dari garis axis

Figure 60: Kustomisasi tampilan dari garis axis

Kita dapat mengatur tick pada axis baik yang memiliki skala diskrit maupun kontinyu. Fungsi yang digunakan adalah scale_x_continous() dan scale_y_continous() untuk tick dengan nilai kontinyu dan scale_x_discrete() dan scale_y_discrete().

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 61.

ggplot(gapminder, aes(continent, lifeExp,
                      fill=continent))+
  geom_boxplot()+
  theme_gdocs()+
  scale_fill_gdocs()+
  # kustomisasi tick mark
  scale_y_continuous(
    # nilai dari 0 sampai 100 tiap 10 tick
    breaks=seq(0,100,10))
Kustomisasi tick mark

Figure 61: Kustomisasi tick mark

5.10.10 Menambahkan Garis Lurus Pada Plot

Fungsi yang dapat digunakan untuk menambahkan garis lurus antara lain:

  • geom_hline(): menambahkan garis horizontal.
  • geom_abline(): menambahkan garis regresi.
  • geom_vline(): menambahkan garis vertikal.
  • geom_segment(): menambahkan garis segmen.

Format yang digunakan untuk fungsi geom_hline() dan geom_vline() adalah sebagai berikut:

geom_hline(yintercept, linetype, color, size)
geom_vline(xintercept, linetype, color, size)

Berikut adalah contoh penerapan kedua fungsi tersebut yang disajikan pada Gambar 62 dan Gambar 63:

ggplot(gapminder, aes(lifeExp, fill=..count..))+
  geom_histogram()+
  theme_calc()+
  # menambahkan garis vertikal
  geom_vline(xintercept=mean(gapminder$lifeExp), 
             linetype="twodash",
             color="red",
             size=1.5)
Penerapan vline

Figure 62: Penerapan vline

ggplot(gapminder, aes(continent, lifeExp, 
                      fill=continent))+
  geom_boxplot()+
  theme_calc()+
  scale_fill_calc()+
  # menambahkan garis horizontal
  geom_hline(yintercept=mean(gapminder$lifeExp), 
             linetype="twodash",
             color="red",
             size=1.5)
Penerapan hline

Figure 63: Penerapan hline

Selain menggunakan fungsi geom_smooth(), garis regresi dapat ditambahkan melalui fungsi `geom_abline(). Format yang digunakan adalah sebagai berikut:

geom_abline(intercept, slope, linetype, color, size)

Untuk membuat garis regresi kita perlu membuat model regresi terlebih dahulu menggunakn fungsi lm(). Berikut adalah contoh model yang dibuat beserta koefisien regresinya.

# membuat model regresi
mod <- lm(lifeExp~gdpPercap, data=gapminder)

# print model
mod
## 
## Call:
## lm(formula = lifeExp ~ gdpPercap, data = gapminder)
## 
## Coefficients:
## (Intercept)    gdpPercap  
##   5.396e+01    7.649e-04
# koefisien regresi model
coef <- coefficients(mod)

# print koefisien
coef
##  (Intercept)    gdpPercap 
## 5.395556e+01 7.648826e-04

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 64 untuk membuat plot regresi linier.

ggplot(gapminder, aes(gdpPercap, lifeExp))+
  geom_point(shape=1, color="grey")+
  theme_stata()+
  # menambahkan garis regresi
  geom_abline(intercept=5.395556e+01,
         slope=7.648826e-04,
         linetype="twodash",
             color="red",
             size=1)
Penerapan abline

Figure 64: Penerapan abline

Kita dapat menambahkan garis segment untuk menunjukkan sebuah observasi. Format yang digunakan adalah sebagai berikut:

geom_segment(aes(x, y, xend, yend))

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 65 untuk membuat garis segmen.

library(grid)
ggplot(gapminder, aes(gdpPercap, lifeExp))+
  geom_point(shape=1, color="grey")+
  theme_stata()+
  # menambahkan tanda panah
  geom_segment(x=70000, y=80,
                   xend=60000, yend=70,
                   arrow=arrow(length=unit(0.1, "inches")),
               linetype="twodash",
               color="red",
               size=1)
Penerapan garis segmen

Figure 65: Penerapan garis segmen

5.10.11 Melakukan Rotasi Pada Grafik

Rotasi grafik atau pembalikan axis dapat dilakukan menggunakan fungsi berikut:

  • coord_flip(): untuk membuat plot horizontal.Rotasi axis sehingga sumbu x dapat menjadi sumbu y dan sebaliknya.
  • scale_x_reverse() dan scale_x_reverse(): pembalikan skala pada axis.

Misalkan kita ingin membuat plot horizontal pada box plot sehingga mempermudah kita dalam melakukan perbandingan terhadap masing-masing grup. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 66.

ggplot(gapminder, aes(continent, lifeExp, 
                      fill=continent))+
  geom_boxplot()+
  theme_economist()+
  scale_fill_economist()+
  # rotasi axis
  coord_flip()
Rotasi axis

Figure 66: Rotasi axis

Kita dapat juga melakukan pembalikan skala pada axis sehingga skala yang semula berawal dari min ke max menjadi sebaliknya. Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 67.

ggplot(gapminder, aes(lifeExp, fill=..count..))+
  geom_histogram()+
  theme_wsj()+
  # pembalikan sumbu y
  scale_y_reverse()
Pembalikan sumbu y

Figure 67: Pembalikan sumbu y

5.10.12 Facet

Facet digunakan untuk membagi plot menjadi panel matriks. Setiap panel menunjukkan setiap kelompok data. Fungsi facet yang dapat digunakan antara lain:

  • facet_grid()
  • facet_wrap()

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 68 dan Gambar 69 untuk membuat facet pada satu variabel.

ggplot(gapminder, aes(lifeExp, fill=..count..))+
  geom_histogram()+
  theme_gdocs()+
  facet_grid(.~continent)
Facet horizontal satu variabel

Figure 68: Facet horizontal satu variabel

ggplot(gapminder, aes(lifeExp, fill=..count..))+
  geom_histogram()+
  theme_gdocs()+
  facet_grid(continent~.)
Facet vertikal satu variabel

Figure 69: Facet vertikal satu variabel

Kita dapat pula melakukan facet terhadap dua buah variabel.Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 70 untuk membuat facet pada dua variabel.

gapminder%>%
  filter(year==1952|year==2007,
         continent %in% c("Asia","Americas"))%>%
  ggplot(aes(continent, lifeExp, 
             fill=factor(year)))+
  geom_boxplot()+
  theme_stata()+
  scale_fill_stata()+
  facet_grid(continent~factor(year))
Facet dua variabel

Figure 70: Facet dua variabel

Kita dapat mengatur skala dari axis menggunakan argument sebagai berikut:

  • free: skala akan disesuaikan berdasarkan pada setiap axis.
  • free_x: skala pada sumbu x akan dibiarkan menyesuaikan secara bebas.
  • free_y: skala pada sumbu y akan dibiarkan menyesuaikan secara bebas.
  • fixed (default): skala axis diseragamkan pada seluruh panel.

Berikut adalah sintaks yang digunakan beserta output yang dihasilkan pada Gambar 71 untuk membuat facet pada dua variabel dengan skala bebas pada sumbu y.

gapminder%>%
  filter(year==1952|year==2007,
         continent %in% c("Asia","Americas"))%>%
  ggplot(aes(continent, lifeExp, 
             fill=factor(year)))+
  geom_boxplot()+
  theme_stata()+
  scale_fill_stata()+
  facet_grid(continent~factor(year), scales="free_y")
Facet dua variabel dengan skala bebas pada sumbu y

Figure 71: Facet dua variabel dengan skala bebas pada sumbu y

Referensi

  1. Wickham, H. Grolemund G. 2016. R For Data Science: Import, Tidy, Transform, Visualize, And Model Data. O’Reilly Media, Inc.
  2. Peng, R.D. 2015. Exploratory Data Analysis with R. Leanpub book.
  3. GGPLOT2 Documentation. https://ggplot2.tidyverse.org/
  4. STHDA. ggplot2 - Essentials. <www.sthda.com/english/wiki/ggplot2-essentials>