Dalam budaya Jawa, weton merupakan kombinasi hari (Minggu–Sabtu) dan pasaran (Legi, Pahing, Pon, Wage, Kliwon). Kombinasi ini digunakan untuk berbagai keperluan spiritual dan sosial, termasuk untuk menilai kecocokan pasangan yang akan menikah. Tradisi ini dikenal dalam masyarakat sebagai Primbon Jawa. Pada tulisan ini, saya akan membagikan bagaimana membuat visualisasi interaktif hubungan antar weton berdasarkan kecocokan pernikahan menurut Primbon Jawa, menggunakan R dan library visNetwork.
1 Langkah 1: Menyiapkan Library
Pertama, kita muat pustaka yang dibutuhkan: tidyverse untuk manipulasi data dan visNetwork untuk visualisasi jaringan.
2 Langkah 2: Menentukan Nilai Neptu Hari dan Pasaran
Setiap hari dan pasaran memiliki nilai neptu, sebagai berikut:
3 Langkah 3: Membuat Kombinasi Semua Weton
Selanjutnya, kita buat kombinasi semua kemungkinan weton (7 hari × 5 pasaran = 35 kombinasi):
weton_df <- expand.grid(
hari = names(hari_neptu),
pasaran = names(pasaran_neptu),
stringsAsFactors = FALSE
) %>%
mutate(
name = paste(hari, pasaran),
neptu = hari_neptu[hari] + pasaran_neptu[pasaran],
id = row_number(),
group = "Weton" # <== Set semua ke satu nilai tetap
) %>%
select(id, label = name, neptu, group)4 Langkah 4: Membuat Fungsi Klasifikasi Kecocokan
Menurut Primbon Jawa, hasil penjumlahan neptu antara dua orang akan diklasifikasikan ke dalam 8 kategori seperti berikut:
klasifikasi_primbon <- function(total_neptu) {
case_when(
total_neptu %in% c(1, 9, 10, 18, 19, 27, 28, 36) ~ "Pegat",
total_neptu %in% c(2, 11, 20, 29) ~ "Ratu",
total_neptu %in% c(3, 12, 21, 39) ~ "Jodoh",
total_neptu %in% c(4, 13, 22, 31) ~ "Topo",
total_neptu %in% c(5, 14, 23, 32) ~ "Tinari",
total_neptu %in% c(6, 15, 24, 33) ~ "Padu",
total_neptu %in% c(7, 16, 25, 34) ~ "Sujana",
total_neptu %in% c(8, 17, 26, 35) ~ "Pesthi",
TRUE ~ NA_character_
)
}5 Langkah 5: Membuat Fungsi Edge Berdasarkan Kategori
Untuk membuat jaringan antar weton, kita buat fungsi buat_edges_kategori() untuk menghasilkan garis penghubung antar node:
buat_edges_kategori <- function(kategori, warna) {
expand.grid(from = weton_df$label, to = weton_df$label) %>%
filter(from != to) %>%
rowwise() %>%
mutate(
n1 = weton_df$neptu[match(from, weton_df$label)],
n2 = weton_df$neptu[match(to, weton_df$label)],
total = n1 + n2,
status = klasifikasi_primbon(total)
) %>%
ungroup() %>%
filter(status == kategori) %>%
mutate(
from_id = weton_df$id[match(from, weton_df$label)],
to_id = weton_df$id[match(to, weton_df$label)],
color = warna,
title = paste(from, "dan", to, "<br>Status:", status)
) %>%
select(from = from_id, to = to_id, color, title)
}6 Langkah 6: Visualisasi Interaktif per Kategori
Berikut adalah contoh visualisasi untuk kategori Pegat:
edges_pegat <- buat_edges_kategori("Pegat", "red")
visNetwork(weton_df, edges_pegat) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visPhysics(stabilization = TRUE) %>%
visLegend(addEdges = data.frame(label = "Pegat", color = "red"), useGroups = FALSE)edges_ratu <- buat_edges_kategori("Ratu", "green")
visNetwork(weton_df, edges_ratu) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Ratu", color = "green"), useGroups = FALSE)edges_jodoh <- buat_edges_kategori("Jodoh", "blue")
visNetwork(weton_df, edges_jodoh) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Jodoh", color = "blue"), useGroups = FALSE)edges_topo <- buat_edges_kategori("Topo", "orange")
visNetwork(weton_df, edges_topo) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Topo", color = "orange"), useGroups = FALSE)edges_tinari <- buat_edges_kategori("Tinari", "gold")
visNetwork(weton_df, edges_tinari) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Tinari", color = "gold"), useGroups = FALSE)edges_padu <- buat_edges_kategori("Padu", "purple")
visNetwork(weton_df, edges_padu) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Padu", color = "purple"), useGroups = FALSE)edges_sujana <- buat_edges_kategori("Sujana", "brown")
visNetwork(weton_df, edges_sujana) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Sujana", color = "brown"), useGroups = FALSE)edges_pesthi <- buat_edges_kategori("Pesthi", "darkgreen")
visNetwork(weton_df, edges_pesthi) %>%
visEdges(smooth = FALSE) %>%
visOptions(highlightNearest = TRUE) %>%
visInteraction(hover = TRUE) %>%
visLegend(addEdges = data.frame(label = "Pesthi", color = "darkgreen"), useGroups = FALSE)Melalui pendekatan ini, kita bisa menggali kekayaan budaya Nusantara secara visual dan interaktif. Visualisasi ini tidak hanya menarik untuk dipelajari, tapi juga bisa dijadikan sarana edukasi budaya, bahkan dalam dunia akademik dan teknologi.