Penyajian data (data visualization) merupakan bentuk pengemasan suatu data secara visual sedemikian sehingga data lebih mudah dipahami. Penyajian data bisa dilakukan dalam bentuk tabel, diagram, maupun grafik.
Penyajian data yang baik:
Visualisasi data adalah langkah penting dalam analisis data karena
membantu dalam memahami, menganalisis, dan menyampaikan informasi secara
efektif. Di R, fungsi dasar untuk membuat grafik adalah
plot(). Fungsi ini sangat fleksibel dan dapat digunakan
untuk membuat berbagai jenis plot, mulai dari scatter plot sederhana
hingga plot yang lebih kompleks.
Fungsi plot() adalah fungsi dasar di R untuk membuat
grafik 2D. Grafik yang dihasilkan bisa berupa scatter plot, line plot,
bar plot, dan lain-lain, tergantung pada parameter yang digunakan.
Format:
plot(x, y, type = "p", main = "Judul Plot", xlab = "Label X", ylab = "Label Y", ...)
dimana:
x adalah vektor data untuk sumbu Xy adalah vektor data untuk sumbu Ytype adalah jenis plot (misalnya p untuk point atau
titik, l untuk line atau garis)main adalah judul utama plotxlab adalah Label untuk sumbu Xylab adalah Label untuk sumbu Y... parameter tambahan untuk kustomisasi lebih
lanjutScatter plot digunakan untuk menunjukkan hubungan antara dua variabel numerik.
# Data contoh
x <- 1:10
y <- c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29)
# Membuat scatter plot dasar
plot(x, y, main = "Scatter Plot Dasar", xlab = "X", ylab = "Y", pch = 19, col = "blue")
Terdapat parameter pch yang mengatur tipe simbol menjadi
lingkaran penuh, dan col yang mengatur warna titik menjadi
biru.
plot(
1:10,
main = "Grafik Saya", xlab = "sumbu-X",
ylab = "sumbu-Y",
col = "red", # warna titik
cex = 2, # size titik, 1 default, 0.5 setengahnya, 2 berarti 2x
pch = 25, # bentuk titik, dari 0-25 (silahkan dieksplor)
)
Line plot digunakan untuk menunjukkan tren atau perubahan data seiring waktu.
# Membuat line plot
plot(x, y, type = "l", main = "Line Plot Dasar", xlab = "X", ylab = "Y", col = "red", lwd = 2)
Terdapat parameter lwd yang mengatur ketebalan garis,
type mengatur jenis plot menjadi garis, dan
col mengatur warna garis menjadi merah.
Tipe Plot sendiri bisa kita ubah tergantung daripada kebutuhannya. Beberapa tipe plot yang umum digunakan.
type = "p" : Scatter plot (default)type = "l" : Line plottype = "b" : Plot dengan garis dan titiktype = "o" : Garis dan titik saling overlaptype = "h" : Histogramtype = "s" : Step plotplot(x, y, type = "b", main = "Poin dan Garis Gabungan", xlab = "X", ylab = "Y", pch = 16, col = "darkgreen", lty = 2)
Terdapat parameter baru, yaitu lty yang merupakan tipe
garis putus-putus.
Kita bisa menambahkan beberapa data pada plot yang sama menggunakan
fungsi lines() atau points().
# Membuat plot pertama
plot(x, y, type = "l", col = "blue")
# Menambahkan garis lain
lines(x, y + 2, col = "red")
# Membuat plot pertama
plot(x, y, type = "p", col = "blue")
# Menambahkan titik lain
points(x, y + 2, col = "red", pch = 19)
Scatter Plot bisa juga untuk perbandingan.
# hari pertama, usia dan kecepatan 12 mobil:
x1 <- c(5, 7, 8, 7, 2, 2, 9, 4, 11, 12, 9, 6)
y1 <- c(99, 86, 87, 88, 111, 103, 87, 94, 78, 77, 85, 86)
# hari kedua, usia dan kecepatan 15 mobil:
x2 <- c(2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12)
y2 <- c(100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85)
plot(x1, y1,
main = "Pengamatan Mobil",
xlab = "Usia",
ylab = "Kecepatan",
col = "red",
cex = 2
)
points(x2, y2,
col = "blue",
cex = 2
)
Berikut ini adalah contoh sederhana pembuatan bar plot.
# x-axis values
x <- c("A", "B", "C", "D")
# y-axis values
y <- c(2, 4, 6, 8)
# Bisa menempatkan label di tiap bar
barplot(y, names.arg = x)
# Bisa mengatur lebar bar
barplot(y, names.arg = x, width = 0.5)
barplot(y, names.arg = x, width = c(1, 2, 3, 4)) # lebar setiap bar berbeda
# Bisa mengatur posisi label
barplot(y, names.arg = x, width = 0.5, horiz = TRUE)
# Bisa mengatur warna bar
barplot(y, names.arg = x, width = 0.5, col = "blue")
# Density atau bar texture
barplot(y, names.arg = x, density = 10)
# Bisa mengatur title
barplot(y,
names.arg = x,
width = 0.5,
col = "blue",
main = "Contoh Grafik Bar"
)
Contoh lain misalkan memanfaatkan dataset yang ada di dalam R, yaitu
mtcars.
# Data frekuensi
counts <- table(mtcars$gear)
# Membuat bar plot
barplot(
counts,
main = "Frekuensi Gear pada mtcars",
xlab = "Jumlah Gear",
ylab = "Frekuensi",
col = "cyan")
Pie chart merupakan plot lingkaran yang digunakan untuk menampilkan data dalam bentuk proporsi berdasarkan bagian-bagian lingkaran, dengan masing-masing mencerminkan persentase dari keseluruhan.
x <- c(10, 20, 30, 40)
pie(x)
# Pie pertama akan mulai pada 90 derajat
pie(x, init.angle = 90)
# Tambahkan label dan header
mylabels <- c("Apel", "Pisang", "Semangka", "Kurma")
pie(x, labels = mylabels, main = "Buah-buahan")
# Bisa tambahkan warna
mycolors <- c("blue", "yellow", "green", "black")
pie(x, labels = mylabels, main = "Buah-buahan", col = mycolors)
# Bisa tambahkan legenda
# bottomright, bottom, bottomleft, left, topleft, top, topright, right, center
legend("bottomright", mylabels, cex = 0.8, fill = mycolors)
Histogram digunakan untuk menampilkan distribusi frekuensi data numerik.
# Data contoh
data <- rnorm(100, mean = 50, sd = 10)
# Membuat histogram
hist(data, main = "Histogram Distribusi Data", xlab = "Nilai", ylab = "Frekuensi", col = "lightblue", border = "black")
Boxplot digunakan untuk menggambarkan distribusi data dan mendeteksi outlier.
# Membuat boxplot
boxplot(mtcars$mpg, main = "Boxplot MPG pada mtcars", ylab = "Miles Per Gallon", col = "orange")
# Data kategoris
education <- factor(c("SMA", "Sarjana", "Magister", "Doktoral", "Sarjana", "Doktoral"))
# Membuat plot kategori
plot(education)
Fungsi plot() menyediakan banyak opsi untuk menyesuaikan tampilan plot Anda. Berikut adalah beberapa parameter yang sering digunakan:
col: mengatur warna elemen plot (titik, garis,
dll)pch: mengatur tipe simbol titikcex: mengatur ukuran simbolmain: judul utama plotsub: subjudul plotxlab dan ylab: label pada sumbu X dan
Yfont.main, font.lab,
cex.main, cex.lab: mengatur gaya dan ukuran
fontgrid: menambah grid pada plotabline(): menambah garis referensi, dalam hal ini garis
horizontal pada nilai rata-rata Y misalkanSelain itu, untuk menampilkan beberapa grafik dalam satu jendela,
kita bisa menggunakan fungsi par() dengan parameter
mfrow atau mfcol. Ada juga kita bisa mengatur
skala dari sumbu X dan Y menggunakan parameter xlim dan
ylim.
Contoh plot yang sudah dikostumisasi:
x <- 1:10
y1 <- seq(2, 20, by = 2)
y2 <- c(3, 5, 7, 9, 11, 13, 15, 17, 19, 21)
# Membuat plot pertama
plot(x, y1, type = "b", col = "blue", pch = 19, ylim = c(0, 25), main = "Plot dengan Legenda", xlab = "X", ylab = "Y")
# Menambahkan plot kedua
lines(x, y2, type = "b", col = "green", pch = 17)
# Menambahkan legenda
legend("topleft", legend = c("Y1", "Y2"), col = c("blue", "green"), pch = c(19, 17), lty = 1)
# Menampilkan 2 plot dalam 1 jendela (2 baris, 1 kolom)
par(mfrow = c(2, 1))
# Plot pertama
plot(x, y1, type = "b", col = "red", pch = 19, ylim = c(0, 25), main = "Plot 1", xlab = "X", ylab = "Y1")
# Plot kedua
x2 <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
barplot(y1,
names.arg = x2,
width = 0.5,
col = "yellow",
main = "Plot 2"
)
Kita dapat membuat plot langsung dari data frame, yang memudahkan dalam visualisasi data yang terstruktur.
# Menggunakan dataset mtcars
data(mtcars)
# Scatter plot mpg vs hp
plot(mtcars$hp, mtcars$mpg, main = "MPG vs Horsepower", xlab = "Horsepower (hp)", ylab = "Miles Per Gallon (mpg)", pch = 16, col = "darkgreen")
Kita juga bisa menggunakan formula untuk menyederhanakan kode plot di atas dengan formula interface.
# Scatter plot dengan formula
plot(mpg ~ hp, data = mtcars, main = "MPG vs Horsepower", xlab = "Horsepower (hp)", ylab = "Miles Per Gallon (mpg)", pch = 18, col = "brown")
Biasanya, setelah kita membuat grafik, kita ingin menyimpan plot tersebut ke dalam bentuk file (png, jpeg, atau pdf).
Menyimpan ke dalam PNG
# Membuka perangkat PNG
png("scatter_plot.png", width = 800, height = 600)
# Membuat plot
plot(x, y1, main = "Scatter Plot PNG", xlab = "X", ylab = "Y", pch = 20, col = "navy")
# Menutup perangkat
dev.off()
## png
## 2
** Menyimpan ke dalam pdf**
# Membuka perangkat PDF
pdf("line_plot.pdf", width = 8, height = 6)
# Membuat plot
plot(x, y2, type = "l", main = "Line Plot PDF", xlab = "X", ylab = "Y", col = "maroon", lwd = 2)
# Menutup perangkat
dev.off()
## png
## 2
Seperti yang sudah dicontohkan di atas bahwa dengan menggunakan
par() kita dapat menampilkan beberapa plot dalam satu
jendela grafik.
# Mengatur layout menjadi 2 baris dan 2 kolom
par(mfrow = c(2, 2))
# Plot 1: Scatter Plot
plot(x, y1, main = "Scatter Plot", xlab = "X", ylab = "Y1", pch = 16, col = "blue")
# Plot 2: Line Plot
plot(x, y2, type = "l", main = "Line Plot", xlab = "X", ylab = "Y2", col = "red", lwd = 2)
# Plot 3: Bar Plot
barplot(counts, main = "Bar Plot", xlab = "Gear", ylab = "Frequency", col = "cyan")
# Plot 4: Boxplot
boxplot(mtcars$mpg, main = "Boxplot MPG", ylab = "Miles Per Gallon", col = "orange")
# Mengembalikan layout ke default
par(mfrow = c(1, 1))
Dataset bawaan R, yaitu mtcars dapat digunakan sebagai
bahan untuk pembuatan grafik multi-plot yang mencakup berbagai jenis
plot. Dataset mtcars adalah dataset klasik di R yang berisi
data spesifikasi teknis dari 32 mobil seperti konsumsi bahan bakar,
jumlah silinder, tenaga, berat, dan lain-lain.
Tujuan dari multi-plot ini adalah
hp) dan konsumsi bahan bakar (mpg).mpg untuk setiap jumlah
silinder (cyl).hp secara
keseluruhan.am).# Mengatur layout menjadi 2 baris dan 2 kolom
par(mfrow = c(2, 2), mar = c(4, 4, 2, 1), oma = c(0, 0, 2, 0))
# Scatter Plot: Hubungan antara tenaga kuda dan konsumsi bahan bakar
plot(mtcars$hp, mtcars$mpg,
main = "HP vs MPG",
xlab = "Horsepower (HP)",
ylab = "Miles Per Gallon (MPG)",
pch = 19,
col = "darkblue")
abline(lm(mpg ~ hp, data = mtcars), col = "red", lwd = 2) # Menambahkan garis regresi
# Boxplot: Distribusi MPG berdasarkan jumlah silinder
boxplot(mpg ~ cyl, data = mtcars,
main = "MPG by Cylinders",
xlab = "Cylinders",
ylab = "MPG",
col = c("lightgreen", "lightblue", "lightpink"))
# Histogram: Distribusi tenaga kuda
hist(mtcars$hp,
main = "Distribution of Horsepower",
xlab = "Horsepower",
ylab = "Frequency",
col = "lightgray",
border = "black",
breaks = 10)
# Bar Plot: Jumlah mobil berdasarkan transmisi (0 = Automatic, 1 = Manual)
barplot(table(mtcars$am),
main = "Number of Cars by Transmission",
xlab = "Transmission (0 = Automatic, 1 = Manual)",
ylab = "Number of Cars",
col = c("orange", "purple"),
names.arg = c("Automatic", "Manual"))
# Menambahkan judul keseluruhan untuk semua plot
mtext("Analysis of mtcars Dataset", outer = TRUE, cex = 1.5)
Penjelasan:
hp) dan
konsumsi bahan bakar (mpg).mpg untuk setiap kelompok jumlah
silinder (cyl).hp) di
seluruh dataset.am).mtext(): Menambahkan judul keseluruhan untuk semua plot
dalam multi-plot.par(mfrow = c(2, 2)) digunakan untuk mengatur layout
grafik menjadi 2 baris 2 kolommar = c(4, 4, 2, 1) mengatur margin untuk masing-masing
subplotoma = c(0, 0, 2, 0) mengatur margin luar (outer margin
area) untuk keseluruhan plot yang memungkinkan penambahan judul utama di
luar area plot.Contoh lain penggunaan multi-plot
Di sini kita coba menggunakan contoh data keuangan di beberapa satuan
kerja (satker) dimana datanya ada nama satker,
nama kegiatan, nama akun, target,
dan realisasi. Dari data tersebut, ada 4 analisis yang akan
dibangun, yaitu:
# ANALISIS DATA KEUANGAN
# Membuat data yang lebih besar dengan memperbanyak jumlah satker, kegiatan, dan akun
set.seed(123) # Untuk menghasilkan data acak yang konsisten
# Contoh data diperbanyak
nama_satker <- rep(paste("Satker", LETTERS[1:10]), each = 10)
nama_kegiatan <- rep(paste("Kegiatan", 1:10), times = 10)
nama_akun <- rep(paste("Akun", 1:5), times = 20)
# Membuat target dan realisasi secara acak
target <- sample(100:500, 100, replace = TRUE)
realisasi <- target - sample(-50:50, 100, replace = TRUE)
data <- data.frame(nama_satker, nama_kegiatan, nama_akun, target, realisasi)
# Menghitung data tambahan yang diperlukan
agg_data <- aggregate(cbind(target, realisasi) ~ nama_satker, data = data, sum)
agg_data_kegiatan <- aggregate(realisasi ~ nama_kegiatan, data = data, sum) # Agregasi per kegiatan
agg_data$selisih <- agg_data$target - agg_data$realisasi
# Memastikan data tidak memiliki nilai NA atau Inf
data <- na.omit(data) # Menghapus baris yang mengandung NA
agg_data <- agg_data[complete.cases(agg_data), ]
agg_data_kegiatan <- agg_data_kegiatan[complete.cases(agg_data_kegiatan), ]
# Mengatur layout untuk 2x2 grid menggunakan layout()
layout(matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE), widths = c(1, 1), heights = c(1, 1))
# 1. Perbandingan Target vs Realisasi per Satker (Bar Plot)
if (nrow(agg_data) > 0) {
barplot(t(as.matrix(agg_data[, 2:3])),
beside = TRUE,
col = c("deepskyblue3", "orange3"),
names.arg = agg_data$nama_satker,
main = "Perbandingan Target vs Realisasi per Satker",
xlab = "Satker",
ylab = "Nilai (Juta)",
legend.text = c("Target", "Realisasi"),
args.legend = list(x = "topright", bty = "n", inset = 0.05),
las = 2, # Rotasi nama satker agar lebih terlihat
cex.names = 0.8,
border = NA) # Menghilangkan border bar plot
} else {
plot.new() # Membuat plot kosong jika data tidak valid
title(main = "Data Tidak Tersedia")
}
# 2. Total Realisasi per Kegiatan (Bar Plot)
if (nrow(agg_data_kegiatan) > 0) {
barplot(agg_data_kegiatan$realisasi,
names.arg = agg_data_kegiatan$nama_kegiatan,
col = "springgreen4",
main = "Total Realisasi per Kegiatan",
xlab = "Kegiatan",
ylab = "Realisasi (Juta)",
las = 2, # Rotasi nama kegiatan agar lebih terlihat
cex.names = 0.8,
border = NA) # Menghilangkan border bar plot
} else {
plot.new() # Membuat plot kosong jika data tidak valid
title(main = "Data Tidak Tersedia")
}
# 3. Distribusi Realisasi Anggaran per Akun (Boxplot)
if (length(unique(data$nama_akun)) > 0 && length(data$realisasi) > 0) {
boxplot(realisasi ~ nama_akun, data = data,
main = "Distribusi Realisasi Anggaran per Akun",
xlab = "Nama Akun",
ylab = "Realisasi (Juta)",
col = "dodgerblue3",
border = "dodgerblue4", # Warna border boxplot
boxwex = 0.6, # Lebar boxplot
las = 2, # Rotasi nama akun agar lebih terlihat
cex.names = 0.8,
whisklty = 1, # Gaya garis whiskers
staplelty = 0) # Menghilangkan staple pada outliers
} else {
plot.new() # Membuat plot kosong jika data tidak valid
title(main = "Data Tidak Tersedia")
}
# 4. Selisih Target vs Realisasi per Satker (Bar Plot Horizontal)
if (nrow(agg_data) > 0) {
barplot(agg_data$selisih,
names.arg = agg_data$nama_satker,
col = "orchid4",
main = "Selisih Target vs Realisasi per Satker",
xlab = "Selisih (Juta)",
horiz = TRUE,
cex.names = 0.8,
border = NA) # Menghilangkan border bar plot
} else {
plot.new() # Membuat plot kosong jika data tidak valid
title(main = "Data Tidak Tersedia")
}
# Menambahkan judul keseluruhan untuk semua plot
mtext("Analisis Keuangan Dataset (2x2 Layout)", outer = TRUE, cex = 1.5, col = "darkblue")