Visualisasi Interaktif Kecocokan Weton Jawa dengan R

Weton merupakan kombinasi antara hari dan pasaran dalam kalender Jawa. Dalam budaya Jawa, weton sering digunakan sebagai dasar dalam berbagai perhitungan, salah satunya untuk menilai kecocokan pasangan dalam pernikahan. Tradisi ini dikenal sebagai Primbon Jawa.

Dataviz
visNetwork
Author
Published

Tuesday, the 8th of July, 2025

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:

hari_neptu <- c("Minggu"=5, "Senin"=4, "Selasa"=3, "Rabu"=7, "Kamis"=8, "Jumat"=6, "Sabtu"=9)
pasaran_neptu <- c("Legi"=5, "Pahing"=9, "Pon"=7, "Wage"=4, "Kliwon"=8)

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.

Back to top