Pemrograman Grafik

Author

Muhammad Syafiq

Rangkuman Materi

R menyediakan dua pendekatan utama untuk membuat grafik:

1. Base R Graphics – cepat dan sederhana, cocok untuk eksplorasi.

2. Grammar of Graphics (ggplot2) – fleksibel, konsisten, dan estetik.

Device dalam R

Device adalah media output grafik di R. Default-nya adalah layar (Windows, X11, Quartz). Namun kita bisa juga menyimpan grafik ke file.

Contoh perangkat (devices):

- Layar: windows(), X11(), quartz()

- File: png(), jpeg(), bmp(), pdf()

Grafik Dasar (Base R)

plot(x, y, type, main, xlab, ylab, col, lwd, pch)

Parameter type penting:

  • "p" = points

  • "l" = lines

  • "b" = both

  • "h" = histogram-like

  • "s" = step

  • "n" = hanya sumbu (tanpa data)

x <- 1:10
y <- x^2
plot(x, y, type="b", col="blue", main="Hubungan x dan x^2",
     xlab="x", ylab="x^2")

# membuat vektor data 
x <- c(1:10); y <- x^2

# membagi jendela grafik menajdi 2 baris dan 4 kolom
par(mfrow=c(2,4))

# loop
type <- c("p","l","b","o","h","s","n")
for (i in type){
  plot(x,y, type= i,
       main= paste("type=", i))
}

set.seed(123)
data <- rnorm(200, mean=50, sd=10)

hist(data, freq=FALSE, col="lightblue", main="Distribusi Normal")
curve(dnorm(x, mean=50, sd=10), add=TRUE, col="red", lwd=2)

Boxplot

Boxplot digunakan untuk membandingkan distribusi beberapa kelompok.

boxplot(len ~ supp, data=ToothGrowth, col=c("orange","cyan"),
        main="Efek Suplemen terhadap Panjang Gigi")

Grafik dengan ggplot2

Paket ggplot2 didasarkan pada konsep Grammar of Graphics.
Formula umum:

grafik=data+aes()+geom+stat+scale

library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(mpg, aes(x=class, fill=drv)) +
  geom_bar() +
  labs(title="Jumlah Mobil per Kelas dan Jenis Penggerak")

Cheetsheet ggplot2

Link

Contoh Studi Kasus

Tren Penjualan

Sebuah perusahaan ingin melihat tren penjualan bulanan selama 2 tahun.

set.seed(42)
bulan <- 1:24
sales <- round(rnorm(24, mean=1000, sd=200))

plot(bulan, sales, type="l", lwd=2, col="blue",
     main="Tren Penjualan Bulanan",
     xlab="Bulan", ylab="Penjualan")
abline(h=mean(sales), col="red", lty=2) # rata-rata

Interpretasi: garis biru menunjukkan fluktuasi penjualan bulanan, garis merah menunjukkan rata-rata.

Perbandingan Kelompok Pasien

Seorang peneliti kesehatan ingin membandingkan tekanan darah sistolik antara kelompok A dan B.

set.seed(99)
A <- rnorm(50, mean=120, sd=15)
B <- rnorm(50, mean=135, sd=20)
data_bp <- data.frame(
  group = rep(c("A","B"), each=50),
  systolic = c(A,B)
)

ggplot(data_bp, aes(x=group, y=systolic, fill=group)) +
  geom_boxplot() +
  labs(title="Perbandingan Tekanan Darah Sistolik") +
  scale_fill_manual(values=c("skyblue","tomato"))

Interpretasi: terlihat bahwa kelompok B cenderung memiliki nilai sistolik lebih tinggi.

Data Pariwisata

Data simulasi jumlah wisatawan domestik dan mancanegara di beberapa provinsi.

prov <- c("Bali","Jakarta","Jabar","Jatim","Sumut","DIY")
domestik <- sample(500:1000, 6)
manca <- sample(300:700, 6)

df_tour <- data.frame(
  Provinsi = rep(prov, 2),
  Wisatawan = c(domestik, manca),
  Kategori = rep(c("Domestik","Mancanegara"), each=6)
)

ggplot(df_tour, aes(x=Provinsi, y=Wisatawan, fill=Kategori)) +
  geom_bar(stat="identity") +
  geom_text(aes(label=Wisatawan), position=position_stack(vjust=0.5)) +
  labs(title="Jumlah Wisatawan per Provinsi") +
  scale_fill_manual(values=c("gold","darkgreen"))

Interpretasi: stacked bar chart memperlihatkan kontribusi wisatawan domestik dan mancanegara per provinsi.

Latihan Soal

  1. Buatlah scatter plot dari x=1:20 dan y=x^2 menggunakan plot() dengan judul “Kuadrat Bilangan”.
  2. Gunakan hist() untuk menampilkan histogram dari 200 bilangan acak Normal(μ=5, σ=2). Beri warna biru dan judul “Histogram Data Normal”.
  3. Buat grafik garis (type="l") dari fungsi sinus pada interval [0, 4π] dengan grid vertikal pada setiap π/2.
  4. Dengan data iris, tampilkan boxplot panjang kelopak (Petal.Length) per spesies menggunakan base R.
  5. Gunakan ggplot2 untuk menampilkan distribusi panjang sepal (Sepal.Length) berdasarkan spesies dengan geom_density().
  6. Simulasikan data penjualan bulanan selama 24 bulan (Normal rata-rata=1000, sd=200). Buat grafik garis dengan garis tren rata-rata.
  7. Dengan dataset mtcars, tampilkan scatter plot mpg vs hp dengan:
    • ukuran titik proporsional dengan wt

    • warna berdasarkan cyl

    • garis regresi linear.

  8. Buat dataset simulasi jumlah kunjungan rumah sakit per bulan selama 12 bulan untuk 3 kota. Gunakan distribusi acak dengan rata-rata yang berbeda untuk tiap kota. Buat bar chart yang membandingkan rata-rata kunjungan per kota, dengan anotasi nilai rata-rata di atas batang untuk tiap kota.
  9. Penjualan Produk per Kategori Simulasikan data penjualan untuk 5 produk selama 6 bulan. Data terdiri dari total penjualan untuk tiap produk dan kategori. Buat grafik stacked bar chart dengan ggplot2, dengan masing-masing bar menunjukkan jumlah penjualan dari kategori produk yang berbeda. Tambahkan label angka di atas setiap batang untuk menunjukkan total penjualan.
  10. Distribusi Suhu per Negara Buat dataset yang mensimulasikan distribusi suhu bulanan untuk 5 negara selama 12 bulan. Tampilkan grafik line chart dengan ggplot2, yang menggambarkan perubahan suhu setiap bulan untuk masing-masing negara. Berikan label sumbu dan judul grafik yang sesuai, serta sesuaikan warna untuk masing-masing negara.