x <- 1:10
y <- x^2
plot(x, y, type="b", col="blue", main="Hubungan x dan x^2",
xlab="x", ylab="x^2")Pemrograman Grafik
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)
# 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
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-rataInterpretasi: 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
- Buatlah scatter plot dari
x=1:20dany=x^2menggunakanplot()dengan judul “Kuadrat Bilangan”. - Gunakan
hist()untuk menampilkan histogram dari 200 bilangan acak Normal(μ=5, σ=2). Beri warna biru dan judul “Histogram Data Normal”. - Buat grafik garis (
type="l") dari fungsi sinus pada interval [0, 4π] dengan grid vertikal pada setiap π/2. - Dengan data
iris, tampilkan boxplot panjang kelopak (Petal.Length) per spesies menggunakan base R. - Gunakan
ggplot2untuk menampilkan distribusi panjang sepal (Sepal.Length) berdasarkan spesies dengangeom_density(). - Simulasikan data penjualan bulanan selama 24 bulan (Normal rata-rata=1000, sd=200). Buat grafik garis dengan garis tren rata-rata.
- Dengan dataset
mtcars, tampilkan scatter plotmpgvshpdengan:ukuran titik proporsional dengan
wtwarna berdasarkan
cylgaris regresi linear.
- 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.
- 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.
- 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.