Visualisasi data merupakan salah satu cara yang efektif untuk memahami karakteristik suatu data secara cepat dan intuitif. Melalui visualisasi, data yang awalnya tersaji dalam bentuk deretan angka dapat diubah menjadi tampilan visual yang lebih mudah ditangkap oleh mata. Dengan cara ini, pola umum, perbandingan antar kategori, serta kecenderungan tertentu dalam data dapat dikenali tanpa harus membaca seluruh nilai satu per satu. Pendekatan visual menjadi sangat membantu ketika jumlah data cukup besar dan memiliki banyak variabel yang saling berkaitan.

Data yang digunakan dalam visualisasi ini berasal dari dataset diamonds, yang berisi sekitar 53.940 data berlian. Setiap observasi merepresentasikan satu berlian dengan berbagai karakteristik, baik numerik maupun kategorik. Variabel numerik dalam data ini antara lain berat berlian (carat), harga (price), serta dimensi fisik seperti panjang, lebar, dan kedalaman berlian. Sementara itu, variabel kategorik menggambarkan kualitas berlian, yang meliputi kualitas potongan (cut), tingkat kejernihan (clarity), dan kualitas warna (color). Variabel cut dan clarity bersifat ordinal, artinya memiliki tingkatan kualitas yang berurutan dari rendah ke tinggi, sehingga sangat sesuai untuk dianalisis menggunakan grafik batang.

Fokus visualisasi diarahkan pada variabel cut dan clarity karena keduanya merupakan faktor penting dalam menilai kualitas berlian. Kualitas potongan berkaitan dengan seberapa baik berlian memantulkan cahaya, sedangkan tingkat kejernihan menggambarkan seberapa banyak cacat atau inklusi yang terdapat di dalam berlian. Dengan memahami distribusi kedua variabel ini, kita dapat memperoleh gambaran umum mengenai kualitas berlian yang paling banyak muncul dalam data.


Visualisasi pertama menampilkan distribusi jumlah berlian berdasarkan kualitas potongan.

library(dplyr)
library(ggplot2)

data_cut <- diamonds %>%
  count(cut)

ggplot(data_cut, aes(x = cut, y = n, fill = n)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.6, size = 5) +
  scale_fill_gradient(
    low = "#FFB6C1",
    high = "#C00000",
    limits = c(min(data_cut$n), max(data_cut$n)),
    name = "Frekuensi"   
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.08))) +
  labs(
    title = "Distribusi Frekuensi Berlian Berdasarkan Kualitas Potongan (Cut)",
    x = "Kualitas Potongan (Cut)",
    y = "Frekuensi",
    caption = "Sumber: Dataset diamonds (package ggplot2, R)"
  ) +
  theme_bw(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.caption = element_text(hjust = 0.5),   
    legend.position = "right",
    legend.title = element_text(face = "bold"),
    
    panel.grid.major = element_line(color = "grey80"),
    panel.grid.minor = element_line(color = "grey90")
  )

Dari grafik ini terlihat bahwa berlian dengan kualitas potongan Ideal mendominasi data, diikuti oleh Premium dan Very Good. Sebaliknya, berlian dengan kualitas potongan Good dan terutama Fair jumlahnya relatif lebih sedikit. Pola ini menunjukkan bahwa sebagian besar berlian dalam dataset memiliki kualitas potongan yang tergolong baik hingga sangat baik. Kondisi tersebut mencerminkan kecenderungan data yang terkonsentrasi pada potongan berlian yang mampu menghasilkan pantulan cahaya secara optimal.

Setelah memahami sebaran kualitas potongan secara keseluruhan, perhatian kemudian diarahkan pada bagaimana tingkat kejernihan tersebar di dalam setiap kategori potongan. Visualisasi berikutnya menyajikan perbandingan jumlah berlian berdasarkan kombinasi kualitas potongan dan tingkat kejernihan.

library(dplyr)
library(ggplot2)

diamonds2 <- diamonds %>%
  mutate(
    cut = factor(cut, 
                 levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")),
    clarity = factor(clarity, 
                     levels = c("I1","SI2","SI1","VS2","VS1","VVS2","VVS1","IF"))
  )

data_group <- diamonds2 %>%
  count(cut, clarity)

gradasi_kuning_merah <- c(
  "I1"   = "#FC4E2A",  
  "SI2"  = "#FEB24C",
  "SI1"  = "#F4F723",
  "VS2"  = "#83B542",
  "VS1"  = "#4EAD56",
  "VVS2" = "#A6897D",
  "VVS1" = "#D37791",
  "IF"   = "#F768A1"   
)

ggplot(data_group, aes(x = cut, y = n, fill = clarity)) +
  geom_col(position = position_dodge(width = 0.8)) +
  
  scale_fill_manual(
    values = gradasi_kuning_merah,
    name = "Tingkat Kejernihan (Clarity)",
    labels = c(
      "I1 (cacat jelas)",
      "SI2 (cacat terlihat)",
      "SI1 (cacat agak terlihat)",
      "VS2 (cacat kecil)",
      "VS1 (cacat sangat kecil)",
      "VVS2 (sangat sangat kecil)",
      "VVS1 (hampir tidak terlihat)",
      "IF (tanpa cacat)"
    )
  ) +
  
  labs(
    title = "Perbandingan Tingkat Kejernihan Berlian pada Setiap Kualitas Potongan",
    x = "Kualitas Potongan (Cut)",
    y = "Jumlah Berlian",
    caption = "Sumber: Dataset diamonds (package ggplot2, R)"
  ) +
  
  theme_bw(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.caption = element_text(hjust = 0.5),
    legend.position = "right",
    legend.title = element_text(face = "bold"),
    panel.grid.major = element_line(color = "grey80"),
    panel.grid.minor = element_line(color = "grey90")
  )

Dari grafik ini tampak bahwa pada hampir semua kategori potongan, berlian dengan tingkat kejernihan VS2 dan SI1 memiliki jumlah paling besar. Hal ini menunjukkan bahwa berlian dengan cacat kecil hingga sedang merupakan jenis yang paling umum dijumpai. Sementara itu, berlian dengan kejernihan sangat tinggi seperti IF maupun kejernihan rendah seperti I1 jumlahnya jauh lebih terbatas di setiap kategori potongan.

Untuk melengkapi gambaran tersebut, visualisasi selanjutnya menampilkan proporsi tingkat kejernihan pada masing-masing kualitas potongan. Berbeda dengan grafik sebelumnya yang menekankan jumlah, grafik ini memperlihatkan komposisi relatif kejernihan di dalam setiap kategori potongan.

library(dplyr)
library(ggplot2)
library(scales)

diamonds2 <- diamonds %>%
  mutate(
    cut = factor(cut, 
                 levels = c("Fair", "Good", "Very Good", "Premium", "Ideal")),
    clarity = factor(clarity, 
                     levels = c("I1","SI2","SI1","VS2","VS1","VVS2","VVS1","IF"))
  )

gradasi_kuning_merah <- c(
  "I1"   = "#FC4E2A",  
  "SI2"  = "#FEB24C",
  "SI1"  = "#F4F723",
  "VS2"  = "#83B542",
  "VS1"  = "#4EAD56",
  "VVS2" = "#A6897D",
  "VVS1" = "#D37791",
  "IF"   = "#F768A1"   
)

ggplot(diamonds2, aes(x = cut, fill = clarity)) +
  geom_bar(position = "fill") +
  
  scale_fill_manual(
    values = gradasi_kuning_merah,
    name = "Tingkat Kejernihan (Clarity)",
    labels = c(
      "I1 (cacat jelas)",
      "SI2 (cacat terlihat)",
      "SI1 (cacat agak terlihat)",
      "VS2 (cacat kecil)",
      "VS1 (cacat sangat kecil)",
      "VVS2 (sangat sangat kecil)",
      "VVS1 (hampir tidak terlihat)",
      "IF (tanpa cacat)"
    )
  ) +
  
  scale_y_continuous(labels = percent) +
  
  labs(
    title = "Proporsi Tingkat Kejernihan Berlian pada Setiap Kualitas Potongan",
    x = "Kualitas Potongan (Cut)",
    y = "Proporsi",
    caption = "Sumber: Dataset diamonds (package ggplot2, R)"
  ) +
  
  theme_bw(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    plot.caption = element_text(hjust = 0.5),
    legend.position = "right",
    legend.title = element_text(face = "bold"),
    panel.grid.major = element_line(color = "grey80"),
    panel.grid.minor = element_line(color = "grey90")
  )

Terlihat bahwa meskipun jumlah total berlian berbeda antar kategori potongan, pola proporsi kejernihannya cenderung serupa. Pada hampir semua kualitas potongan, kejernihan VS2 dan SI1 tetap mendominasi, sedangkan kejernihan paling tinggi dan paling rendah hanya menempati porsi kecil. Pola ini menunjukkan bahwa perbedaan kualitas potongan tidak secara drastis mengubah komposisi tingkat kejernihan, melainkan lebih memengaruhi jumlah total berlian yang tersedia.


Secara keseluruhan, rangkaian visualisasi ini memberikan gambaran yang konsisten mengenai karakteristik berlian dalam dataset diamonds. Data didominasi oleh berlian dengan kualitas potongan menengah hingga tinggi serta tingkat kejernihan yang tergolong baik. Berlian dengan kualitas yang sangat rendah maupun yang benar-benar sempurna jumlahnya relatif sedikit dan tidak mendominasi distribusi data. Melalui pendekatan visual yang berurutan dan saling melengkapi, informasi mengenai kualitas berlian dapat dipahami secara menyeluruh, mulai dari distribusi umum hingga komposisi detail di dalam setiap kategori, sehingga menghasilkan pemahaman yang utuh mengenai struktur dan karakteristik data yang dianalisis.