Visualisasi Data Kategorik

Input Data

Package {ggplot2} juga menyediakan beberapa dataframe yang dapat digunakan untuk latihan. Salah satu dataframe yang disediakan adalah diamonds, yaitu data tentang harga dan karakter dari 53.940 berlian.

library(ggplot2)
data(diamonds)
DT::datatable(diamonds)
## Warning in instance$preRenderHook(instance): It seems your data is too big for
## client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html

Bar Chart

Chart ini digunakan untuk menunjukkan jumlah/frekuensi dari setiap kategori atau kelompok. Misal akan dilihat jumlah berlian berdasarkan kualitas potongan berlian (cut). Hasilnya sebagai berikut.

ggplot(data = diamonds, mapping = aes(x = cut)) + 
  geom_bar()

Secara default, geom_bar() menggunakan stat = "count", yang berarti ia akan menghitung jumlah observasi (frekuensi) untuk setiap kategori dari variabel yang disebutkan pada sumbu x dan menampilkannya sebagai tinggi batang. Namun, ketika Anda menggunakan stat = "identity", Anda memberitahu ggplot2 untuk menggunakan nilai yang sudah ada di data sebagai tinggi batang, bukan menghitung frekuensi.

Bar Chart dengan tabel frekuensi

Untuk menggunakan bar chart dengan perintah stat = "identity", kita harus membuat tabel frekuensi di setiap kategori.

Membuat tabel frekuensi

Tabel frekuensi dapat dibuat dengan menggunakan perintah table(). Misalnya kita akan membuat tabel frekuensi berdasarkan variabel kualitas potongan berlian (cut).

freqtab <- as.data.frame(table(diamonds$cut))
freqtab
##        Var1  Freq
## 1      Fair  1610
## 2      Good  4906
## 3 Very Good 12082
## 4   Premium 13791
## 5     Ideal 21551

Membuat Bar Chart

Untuk membuat bar chart ini, kita menggunakan tabel frekuensi yang sudah didefinisikan yaitu freqtab. Kemudian gunakan stat = "identity" untuk menggunakan nilai yang sudah ada di data sebagai tinggi batang. Hasilnya sebagai berikut.

ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_bar(stat = "identity")

Cara lain yang dapat digunakan untuk membuat diagram batang ketika data yang kita miliki sudah dalam bentuk tabel frekuensi adalah dengan geom_col(). Hasilnya sebagai berikut.

ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_col()

Modifikasi Bar Chart

Untuk Menambahkan judul menggunakan perintah labs(), memberikan warna pada grafik menggunakan perintah fill, dan memberikan label pada setiap batang menggunakan perintah geom_text(). Hasilnya sebagai berikut.

ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_col(fill = "coral", alpha = 0.7) + 
  labs(title = "Frekuensi berdasarkan kualitas potongan berlian", 
       x = "kualitas potongan berlian", 
       y = "Frekuensi") + 
  geom_text(aes(label = Freq), vjust = -0.25)

Needle Chart

jenis diagram batang yang menampilkan data dalam bentuk garis vertikal tipis seperti jarum (needle) yang membentang dari sumbu horizontal ke titik data tertentu. Needle Chart sering digunakan untuk menggambarkan tren data diskrit, perubahan nilai dari waktu ke waktu, atau perbandingan antara kategori tertentu. Misal akan membuat grafik jumlah berlian berdasarkan kualitas potongan berlian (cut). Hasilnya sebagai berikut.

ggplot(data = freqtab,
mapping = aes(x = reorder(Var1, Freq), y = Freq)) +
geom_segment(aes(x = reorder(Var1, Freq),
xend= reorder(Var1, Freq),
y = 0, yend = Freq), color = "skyblue") +
geom_point(color = "navyblue", size=4, alpha = 0.6) +
geom_text(aes(label = Freq), vjust = -1.00) +
coord_flip() +
labs(y = "Jumlah Berlian", x = "kualitas potongan berlian")

Grouped Bar Chart

Untuk membuat kelompok/grup pada bar chart dapat menambahkan perintah mapping. Misalnya kita akan membuat grafik jumlah berlian berdasarkan kualitas potongan berlian. Hasilnya sebagai berikut.

ggplot(data = diamonds,
mapping = aes(x = cut, fill =as.factor(color))) + 
geom_bar(position = "dodge", stat = "count") +
labs(x = "kualitas potongan berlian", fill = "warna berlian",
y = "jumlah berlian") +
scale_fill_brewer(palette = "Oranges") +
theme_light()

Stacked Bar Chart

Untuk membuat tampilan menumpuk pada kelompok/grup bar chart dapat digunakan perintah position = "stack". Hasilnya sebagai berikut.

ggplot(data = diamonds,
mapping = aes(x = cut, fill =as.factor(color))) + 
geom_bar(position = "stack", stat = "count") +
labs(x = "kualitas potongan berlian", fill = "warna berlian",
y = "jumlah berlian") +
scale_fill_brewer(palette = "Oranges") +
theme_light()

Pie Chart

Untuk membuat pie chart, pertama kita harus menyiapkan data dengan meringkas menjadi tabel frekuensi. Misalnya akan membuat pie chart persentase jumlah berlian berdasarkan jenis potongan berlian (cut).

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
df <- diamonds %>%
  group_by(cut) %>%
  summarise(counts = n())
df
## # A tibble: 5 × 2
##   cut       counts
##   <ord>      <int>
## 1 Fair        1610
## 2 Good        4906
## 3 Very Good  12082
## 4 Premium    13791
## 5 Ideal      21551

Selanjutnya mengitung posisi label teks sebagai jumlah kumulatif proporsi.

df <- df %>%
  arrange(desc(cut)) %>%
  mutate(prop = round(counts*100/sum(counts), 1),
         lab.ypos = cumsum(prop) - 0.5*prop)
head(df, 4)
## # A tibble: 4 × 4
##   cut       counts  prop lab.ypos
##   <ord>      <int> <dbl>    <dbl>
## 1 Ideal      21551  40       20  
## 2 Premium    13791  25.6     52.8
## 3 Very Good  12082  22.4     76.8
## 4 Good        4906   9.1     92.6

Setelah itu, kita dapat membuat grafik Pie Chart dengan perintah geom_bar() dan coord_polar(). Hasilnya sebagai berikut.

ggplot(df, aes(x = "", y = prop, fill = cut)) +
  geom_bar(width = 1, stat = "identity", color = "white") +
  geom_text(aes(y = lab.ypos, label = prop), color = "white")+
  coord_polar("y", start = 0)+
  ggpubr::fill_palette("jco")+
  theme_void()

Peta Spasial

Pada pembuatan peta spasial, yang perlu disiapkan adalah data excel dan peta SHP. Download data excel disini Download peta shp disini

## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE

Import Data Excel dan SHP

Pertama, kita import data excel dan peta SHP menggunakan perintah read_xlsx() dan read_sf().

#Import Data Excel
data.spasial=read_xlsx("datafix.xlsx",sheet = 1)
head(data.spasial)
## # A tibble: 6 × 4
##   KECAMATAN  KELURAHAN       ID Kasus.DBD
##   <chr>      <chr>        <dbl>     <dbl>
## 1 BATAM KOTA Baloi Permai    23     105. 
## 2 BATAM KOTA Belian          27      42.9
## 3 BATAM KOTA Sukajadi        24      65.8
## 4 BATAM KOTA Sungai Panas    25      98.9
## 5 BATAM KOTA Taman Baloi     22      31.3
## 6 BATAM KOTA Teluk Tering    26      14.1
#IMPORT PETA SHP
shp.batam=read_sf("SHP Batam Desa/batam_desa.shp")

Selanjutnya gabungkan data excel ke dalam data SHP dengan perintah left_join(). Dalam proses penggabungan ini menggunakan variabel kunci ID. Artinya dalam data excel dan peta SHP ada variabel ID sehingga kedua data tersebut dapat digabungkan. Variabel ID merupakan kode angka untuk mewakili setiap lokasi/wilayah yang akan dipetakan.

#Menggabungkan Data ke file SHP
gabung.batam=left_join(shp.batam,data.spasial,by="ID")
head(gabung.batam)
## Simple feature collection with 6 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 103.8982 ymin: 1.052583 xmax: 104.0214 ymax: 1.14891
## CRS:           NA
## # A tibble: 6 × 10
##      ID KECAMATAN.x DESA            KASUS  Long   Lat                   geometry
##   <dbl> <chr>       <chr>           <int> <dbl> <dbl>             <MULTIPOLYGON>
## 1     1 SEKUPANG    TANJUNG RIAU        0  104.  1.08 (((103.936 1.085661, 103.…
## 2     2 SEKUPANG    TANJUNG PINGGIR     0  104.  1.13 (((103.9486 1.144614, 103…
## 3     3 SEKUPANG    TIBAN LAMA          0  104.  1.10 (((104.0175 1.110982, 104…
## 4     4 SEKUPANG    TIBAN BARU          3  104.  1.10 (((103.9724 1.110226, 103…
## 5     5 SEKUPANG    SUNGAI HARAPAN      8  104.  1.11 (((103.9596 1.118562, 103…
## 6     6 SEKUPANG    PATAM LESTARI       1  104.  1.12 (((103.9699 1.129785, 103…
## # ℹ 3 more variables: KECAMATAN.y <chr>, KELURAHAN <chr>, Kasus.DBD <dbl>

Pemetaan data Spasial

Selanjutnya dilakukan pemetaan dengan perintah geom_sf(). Misal akan dipetakan index rate kasus DBD di Kota Batam. Hasilnya adalah sebagai berikut.

#Pemetaan Index Rate Kasus DBD
plot.batam = ggplot(data=gabung.batam) +
  geom_sf(aes(fill = Kasus.DBD)) +
  scale_fill_distiller("Index Rate Kasus DBD", palette = "YlOrRd")

plot.batam

Terima kasih sudah membaca blog ini. Semoga bermanfaat. ^_^