Belajar R – Plot Overlay dengan ggplot

By | July 30, 2024
1,684 Views

Package visualisasi secara umum dan terkenal sih menggunakan ggplot, namun ada sedikit hal yang menurut saya agak aneh, yaitu untuk menyajikan sebuah 2 plot line (seringnya saya lihat tutorial yang ada di internet) menyajikan format tabel berikut (minimal terdiri dari 3 kolom)

Kalau kita menyajikan tabel seperti diatas, maka sangat mudah menampilkan 2 plot line

library(dplyr)
library(openxlsx)
library(ggplot2)

dat1 = read.xlsx('C:\\Users\\mulka\\Desktop\\Mengubah Legend\\dat1.xlsx')
p = ggplot(data = dat1)+
    geom_line(aes(x=no,y = tinggi, colour = jenis_kelamin))
print(p)

Padahal tidak semuanya bisa disajikan seperti itu, misalkan seperti ini

Agar bisa menyajikan visualisasi diatas, maka agak sedikit repot

dat2 = read.xlsx('C:\\Users\\mulka\\Desktop\\Mengubah Legend\\dat2.xlsx')
p = ggplot(data = dat2, aes(x = no)) +
    geom_line(aes(y = tinggi_perempuan, colour = "Laki-Laki")) +
    geom_line(aes(y = tinggi_laki_laki, colour = "Perempuan")) +
    scale_colour_manual("", 
                        breaks = c("Laki-Laki", "Perempuan"),
                        values = c("red", "blue"))
    
print(p)

Atau kalian punya informasi yang lain? Saya sering menggunakan line plot untuk membandingkan antar data target dan prediksi sehingga seringkali menggunakan format tabel seperti no 2!

Cara kedua menggunakan function melt()

Ini cara kedua yang saya gunakan saat ini yaitu menggunakan function melt() disini. Misalkan saya punya dataset berikut

> head(dat)
   TANGGAL TAHUN_2020 TAHUN_2021
1        1         10         80
2        2         20         90
3        3         45         34
4        4         68         90
5        5         30         34
6        6         50         90
7        7         10         91
8        8         90         80
9        9        100         80
10      10        120         90

Kita panggil saja melt()

dat_final = reshape2::melt(dat, id.var='TANGGAL')

Kita cek hasilnya

head(dat_final,20)kan jadi bertambah 20 baris

> head(dat_final,20)
   TANGGAL   variable value
1        1 TAHUN_2020    10
2        2 TAHUN_2020    20
3        3 TAHUN_2020    45
4        4 TAHUN_2020    68
5        5 TAHUN_2020    30
6        6 TAHUN_2020    50
7        7 TAHUN_2020    10
8        8 TAHUN_2020    90
9        9 TAHUN_2020   100
10      10 TAHUN_2020   120
11       1 TAHUN_2021    80
12       2 TAHUN_2021    90
13       3 TAHUN_2021    34
14       4 TAHUN_2021    90
15       5 TAHUN_2021    34
16       6 TAHUN_2021    90
17       7 TAHUN_2021    91
18       8 TAHUN_2021    80
19       9 TAHUN_2021    80
20      10 TAHUN_2021    90

Kita panggil ggplot2 dengan paramater yang lebih lengkap

ggplot(dat_final, aes(x=TANGGAL, y=value, col=variable)) + 
    geom_line()+
    scale_color_manual(values = c("darkred", "steelblue"))+
    labs(ylab= "TANGGAL",
         title = 'LAPORAN NILAI PER TAHUN',
         subtitle = 'tahun 2020 dan 2021', 
         caption = "sumber: Bagian Akademik",
         base_size = 12)

Jadi lebih baik overlay

Paket ribet dengan dplyr

Kalau mau ribet, ya bisa saja biar agak panjang yuk mari

t_2020 = dat %>% select(TAHUN_2020,TANGGAL) %>%
  mutate(TAHUN=2020) %>%
  rename(NILAI=TAHUN_2020)
print(t_2020)

t_2021 = dat %>% select(TAHUN_2021,TANGGAL) %>%
  mutate(TAHUN=2021) %>%
  rename(NILAI=TAHUN_2021)
print(t_2021)

ujian = rbind(t_2020,t_2021)
ujian$TAHUN = as.factor(ujian$TAHUN) #JANGAN LUPA UNTUK DIJADIKAN FAKTOR

# Visualization
ggplot(ujian, aes(x = TANGGAL, y = NILAI)) + 
  geom_line(aes(color = TAHUN, linetype = TAHUN)) + 
  scale_color_manual(values = c("darkred", "steelblue"))+
  labs(ylab= "TANGGAL",
       title = 'LAPORAN NILAI PER TAHUN',
       subtitle = 'tahun 2020 dan 2021', 
       caption = "sumber: Bagian Akademik",
       base_size = 12)

 

See also  Penggabungan / Concatenate String