# ============================================================
# BAB 3 - MENYAJIKAN DATA DALAM GRAFIK
# ============================================================
# Materi:
# 1. Scatter Plot
# 2. Grafik Garis
# 3. Grafik Batang (Bagian Pertama)
# 4. Grafik Batang (Bagian Kedua)
# 5. Diagram Lingkaran
# 6. Histogram
# ============================================================
# Nama: Sierra Alifia Zalfa
# NIM: 2502056018

# ============================================================
# 1. MEMPLOT DATA DALAM R (SCATTER PLOT)
# ============================================================

# Data pendapatan dan pengeluaran 20 responden
data3.1 <- data.frame(
  jeniskelamin = c(
    "Laki-Laki", "Perempuan", "Laki-Laki", "Perempuan",
    "Laki-Laki", "Perempuan", "Laki-Laki", "Perempuan",
    "Laki-Laki", "Perempuan", "Laki-Laki", "Perempuan",
    "Laki-Laki", "Perempuan", "Laki-Laki", "Perempuan",
    "Laki-Laki", "Perempuan", "Laki-Laki", "Perempuan"
  ),
  pendapatan = c(
    3.5, 4.0, 5.0, 5.5, 6.0,
    6.5, 7.0, 7.5, 8.0, 8.5,
    9.0, 9.5, 10.0, 10.5, 11.0,
    11.5, 12.0, 12.5, 13.0, 14.0
  ),
  pengeluaran = c(
    2.5, 3.0, 3.5, 4.0, 4.5,
    5.0, 5.0, 5.5, 6.0, 6.5,
    6.5, 7.0, 7.5, 8.0, 8.0,
    8.5, 9.0, 9.5, 10.0, 10.5
  )
)

# Menampilkan data
print(data3.1)
##    jeniskelamin pendapatan pengeluaran
## 1     Laki-Laki        3.5         2.5
## 2     Perempuan        4.0         3.0
## 3     Laki-Laki        5.0         3.5
## 4     Perempuan        5.5         4.0
## 5     Laki-Laki        6.0         4.5
## 6     Perempuan        6.5         5.0
## 7     Laki-Laki        7.0         5.0
## 8     Perempuan        7.5         5.5
## 9     Laki-Laki        8.0         6.0
## 10    Perempuan        8.5         6.5
## 11    Laki-Laki        9.0         6.5
## 12    Perempuan        9.5         7.0
## 13    Laki-Laki       10.0         7.5
## 14    Perempuan       10.5         8.0
## 15    Laki-Laki       11.0         8.0
## 16    Perempuan       11.5         8.5
## 17    Laki-Laki       12.0         9.0
## 18    Perempuan       12.5         9.5
## 19    Laki-Laki       13.0        10.0
## 20    Perempuan       14.0        10.5
# Membuat scatter plot
pendapatan <- data3.1$pendapatan
pengeluaran <- data3.1$pengeluaran

plot(
  pendapatan,
  pengeluaran,
  main = "Pendapatan dan Pengeluaran per-Bulan",
  xlab = "Pendapatan per-Bulan (Juta Rupiah)",
  ylab = "Pengeluaran per-Bulan (Juta Rupiah)",
  pch = 19
)

# ============================================================
# 2. MENYAJIKAN DATA DENGAN GRAFIK GARIS
# ============================================================

# Data penjualan barang A, B, dan C tahun 2001-2007
data3.2 <- data.frame(
  tahun = 2001:2007,
  barang_A = c(90, 110, 115, 130, 140, 155, 160),
  barang_B = c(85, 90, 105, 110, 120, 125, 130),
  barang_C = c(50, 55, 60, 65, 70, 80, 85)
)

# Menampilkan data
print(data3.2)
##   tahun barang_A barang_B barang_C
## 1  2001       90       85       50
## 2  2002      110       90       55
## 3  2003      115      105       60
## 4  2004      130      110       65
## 5  2005      140      120       70
## 6  2006      155      125       80
## 7  2007      160      130       85
# Variabel
Tahun <- data3.2$tahun
Jumlah_A <- data3.2$barang_A
Jumlah_B <- data3.2$barang_B
Jumlah_C <- data3.2$barang_C

# Grafik garis Barang A
plot(
  Tahun,
  Jumlah_A,
  type = "o",
  pch = 19,
  main = "Penjualan Barang A Tahun 2001-2007",
  xlab = "Tahun",
  ylab = "Jumlah Terjual"
)

# Grafik garis A dan B
plot(
  Tahun,
  Jumlah_A,
  type = "o",
  pch = 19,
  ylim = c(40, 180),
  main = "Penjualan Barang A dan B Tahun 2001-2007",
  xlab = "Tahun",
  ylab = "Jumlah Terjual"
)

lines(
  Tahun,
  Jumlah_B,
  type = "o",
  pch = 19
)

# Grafik garis A, B, dan C
plot(
  Tahun,
  Jumlah_A,
  type = "o",
  pch = 19,
  ylim = c(40, 180),
  main = "Data Penjualan Barang A, B, C Tahun 2001-2007",
  xlab = "Tahun",
  ylab = "Jumlah Terjual"
)

lines(
  Tahun,
  Jumlah_B,
  type = "o",
  pch = 19
)

lines(
  Tahun,
  Jumlah_C,
  type = "o",
  pch = 19
)

# Menambahkan legenda
legend(
  "topleft",
  legend = c("Barang A", "Barang B", "Barang C"),
  lty = 1,
  pch = 19
)

# ============================================================
# 3. MENYAJIKAN DATA DENGAN GRAFIK BATANG
#    (BAGIAN PERTAMA)
# ============================================================

# Data penjualan barang A tahun 2001-2007
data3.3 <- data.frame(
  tahun = 2001:2007,
  barang_A = c(90, 110, 115, 130, 140, 155, 160)
)

# Menampilkan data
print(data3.3)
##   tahun barang_A
## 1  2001       90
## 2  2002      110
## 3  2003      115
## 4  2004      130
## 5  2005      140
## 6  2006      155
## 7  2007      160
# Membuat grafik batang
barplot(
  data3.3$barang_A,
  names.arg = data3.3$tahun,
  main = "Penjualan Barang Jenis A dari Tahun 2001-2007",
  xlab = "Tahun",
  ylab = "Jumlah Barang yang Terjual",
  ylim = c(0, 180)
)

# ============================================================
# 4. MENYAJIKAN DATA DENGAN GRAFIK BATANG
#    (BAGIAN KEDUA)
# ============================================================

# Data jenis kelamin dan hobi
data3.4 <- data.frame(
  jenis_kelamin = c(
    "Laki-Laki",
    "Laki-Laki",
    "Perempuan",
    "Perempuan"
  ),
  hobi = c(
    "Olahraga",
    "Memasak",
    "Olahraga",
    "Memasak"
  ),
  jumlah = c(90, 10, 20, 75)
)

# Menampilkan data
print(data3.4)
##   jenis_kelamin     hobi jumlah
## 1     Laki-Laki Olahraga     90
## 2     Laki-Laki  Memasak     10
## 3     Perempuan Olahraga     20
## 4     Perempuan  Memasak     75
# Membuat tabel silang
tabel_hobi <- xtabs(
  jumlah ~ hobi + jenis_kelamin,
  data = data3.4
)

print(tabel_hobi)
##           jenis_kelamin
## hobi       Laki-Laki Perempuan
##   Memasak         10        75
##   Olahraga        90        20
# Grafik batang berdampingan
barplot(
  tabel_hobi,
  beside = TRUE,
  col = c("gray40", "gray70"),
  main = "Hubungan antara Jenis Kelamin dan Hobi",
  xlab = "Jenis Kelamin",
  ylab = "Jumlah Responden",
  legend.text = TRUE,
  args.legend = list(
    title = "Hobi",
    x = "topright"
  )
)

# Grafik batang bertumpuk
barplot(
  tabel_hobi,
  beside = FALSE,
  col = c("gray40", "gray70"),
  main = "Hubungan antara Jenis Kelamin dan Hobi",
  xlab = "Jenis Kelamin",
  ylab = "Jumlah Responden",
  legend.text = TRUE,
  args.legend = list(
    title = "Hobi",
    x = "topright"
  )
)

# ============================================================
# 5. MENYAJIKAN DATA DENGAN DIAGRAM LINGKARAN
# ============================================================

# Data penjualan produk A, B, C, dan D
data3.5 <- data.frame(
  produk = c("A", "B", "C", "D"),
  jumlah = c(12, 5, 8, 20)
)

# Menampilkan data
print(data3.5)
##   produk jumlah
## 1      A     12
## 2      B      5
## 3      C      8
## 4      D     20
# Menyimpan jumlah penjualan
jumlah_produk <- data3.5$jumlah
nama_produk <- data3.5$produk

# Diagram lingkaran sederhana
pie(
  jumlah_produk,
  labels = nama_produk,
  main = "Data Penjualan Produk A, B, C, dan D"
)

# Diagram lingkaran dengan persentase
persentase <- round(
  jumlah_produk / sum(jumlah_produk) * 100,
  2
)

label_pie <- paste(
  nama_produk,
  persentase,
  "%",
  sep = " "
)

pie(
  jumlah_produk,
  labels = label_pie,
  main = "Data Penjualan Produk A, B, C, dan D"
)

# Diagram lingkaran dengan legenda
pie(
  jumlah_produk,
  labels = persentase,
  main = "Data Penjualan Produk A, B, C, dan D"
)

legend(
  "topright",
  legend = paste("Produk", nama_produk),
  fill = gray.colors(length(nama_produk))
)

# ============================================================
# 6. MENYAJIKAN DATA DENGAN HISTOGRAM
# ============================================================

hist(
  c(
    91, 92, 93, 94, 95, 95, 96, 97, 97, 98,
    98, 99, 99, 100, 100, 101, 101, 102, 102, 103,
    103, 104, 104, 105, 105, 106, 106, 107, 107, 108,
    108, 109, 109, 110, 110, 111, 111, 112, 112, 113,
    113, 114, 114, 115, 115, 116, 116, 117, 117, 118,
    118, 119, 119, 120, 110, 111, 112, 113, 114, 115,
    96, 98, 100, 102, 104, 106, 108, 110, 112, 114,
    116, 118, 120, 97, 99, 101, 103
  ),
  main = "Histogram Skor IQ",
  xlab = "Skor IQ",
  ylab = "Frekuensi",
  breaks = 7
)