Input Data

Package {MASS} package dalam R yang berisi berbagai fungsi statistik dan dataset yang digunakan dalam analisis data, data yang digunakan adalah data “anorexia”. data anorexia berisi data tentang berat badan pasien anoreksia sebelum dan sesudah menjalani terapi.

library(MASS)
data("anorexia")
head(anorexia)
dim(anorexia)
## [1] 72  3

Bar Chart

sebaran dari data kategorik ordinal Jenis Perlakuan Terapi (Treat).

library(sf)
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)  
library(readxl) 
ggplot(data = anorexia, mapping = aes(x = Treat)) + 
  geom_bar()

Secara default, geom_bar() menggunakan stat = “count”, yang berarti ia akan menghitung jumlah observasi (frekuensi) untuk setiap kategori dari variabel yang disebutkan pada sumbu x dan menampilkannya sebagai tinggi batang. Namun, ketika menggunakan stat = “identity”, maka akan diberitahu ggplot2 untuk menggunakan nilai yang sudah ada di data sebagai tinggi batang, bukan menghitung frekuensi.

Bar Chart dengan tabel frekuensi

Membuat tabel frekuensi

freqtab <- as.data.frame(table(anorexia$Treat))
freqtab

Membuat Bar Chart

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_bar(stat = "identity")

membuat frekuensi geom_col

Cara lain yang dapat digunakan untuk membuat diagram batang ketika data yang kita miliki sudah dalam bentuk tabel frekuensi adalah dengan geom_col().

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_col()

Modifikasi Bar Chart

Menambahkan judul, mewarnai grafik, dan memberikan label pada setiap batang.

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data = freqtab, mapping = aes(x = Var1, y = Freq)) + 
  geom_col(fill = "coral", alpha = 0.7) + 
  labs(title = "Frekuensi berdasarkan Jenis Perlakuan Terapi terhadap Perubahan Berat Badan pada Pasien Anoreksia", 
       x = "Jenis Perlakuan Terapi", 
       y = "Perubahan Berat Badan") + 
  geom_text(aes(label = Freq), vjust = -0.25)

Needle Chart

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data = freqtab,
mapping = aes(x = reorder(Var1, Freq), y = Freq)) +
geom_segment(aes(x = reorder(Var1, Freq),
xend= reorder(Var1, Freq),
y = 0, yend = Freq), color = "skyblue") +
geom_point(color = "navyblue", size=4, alpha = 0.6) +
geom_text(aes(label = Freq), vjust = -1.00) +
coord_flip() +
labs(y = "Berat Badan Pasien", x = "Jenis Perlakuan Terapi")

Grouped Bar Chart

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data = anorexia,
mapping = aes(x = Treat, fill =as.factor(Postwt))) + 
geom_bar(position = "dodge", stat = "count") +
labs(x = "Jenis Perlakuan Terapi", fill = "Berat Badan Pasien",
y = "Jumlah Pasien") +
scale_fill_brewer(palette = "RdBu") +
theme_light()
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette RdBu is 11
## Returning the palette you asked for with that many colors

Stacked Bar Chart

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(data=anorexia,
       mapping=aes(x=Treat, fill=as.factor(Postwt)))+
  geom_bar(position="stack", stat="count")+
  labs(x="Jenis Perlakuan Terapi", fill="Berat Badan Pasien",
       y="Jumlah Pasien")+
  scale_fill_brewer(palette = "RdBu")+
  theme_light()
## Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette RdBu is 11
## Returning the palette you asked for with that many colors

Pie Chart

Menyiapkan data dengan meringkas menjadi tabel frekuensi

library(dplyr)
df <- anorexia %>%
  group_by(Treat) %>%
  summarise(counts = n())
df

Mengitung posisi label teks sebagai jumlah kumulatif proporsi.

df <- df %>%
  arrange(desc(Treat)) %>%
  mutate(prop = round(counts*100/sum(counts), 1),
         lab.ypos = cumsum(prop) - 0.5*prop)
head(df, 4)

Membuat grafik Pie Chart

library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
ggplot(df, aes(x="",y = prop, fill=Treat))+
  geom_bar(width=1,stat="identity", color="magenta")+
  geom_text(aes(y=lab.ypos, label = prop), color="black")+
  coord_polar("y", start=0)+
  ggpubr::fill_palette("jco")+
  theme_void()

Peta Spasial (Pemetaan)

#Import Data
library(readxl)
library(sf)
setwd("C:/Users/Zahra Mahendra Putri/Documents/STATISTIKA UNTIRTA/MATA KULIAH/SEMESTER 4/Eksplorasi Dan Visualisasi Data")
#Import Data Excel
data.spasial=read_xlsx("exportsumbar2.xlsx",sheet = 1)
head(data.spasial)
#IMPORT PETA SHP
st_drivers()
dbf.Export_Output = read_sf("C:/Users/Zahra Mahendra Putri/Documents/STATISTIKA UNTIRTA/MATA KULIAH/SEMESTER 4/Eksplorasi Dan Visualisasi Data/exportsumbar2.xlsx")

#Menggabungkan Data ke file SHP
gabung.sumbar=left_join(dbf.Export_Output,data.spasial,by="ID_2,N,10,0")
head(gabung.sumbar)

Pemetaan data Spasial

# Panggil library yang dibutuhkan
library(sf)
library(ggplot2)
library(dplyr)
library(readr)  
library(readxl) 
library(MASS)
library(foreign)

# 1. Baca file shapefile
shapefile_path <- "C:/Users/Zahra Mahendra Putri/Documents/STATISTIKA UNTIRTA/MATA KULIAH/SEMESTER 4/Eksplorasi Dan Visualisasi Data"
sumbar_sf <- st_read(shapefile_path)
## Reading layer `Export_Output' from data source 
##   `C:\Users\Zahra Mahendra Putri\Documents\STATISTIKA UNTIRTA\MATA KULIAH\SEMESTER 4\Eksplorasi Dan Visualisasi Data' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 19 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 98.59618 ymin: -4.01639 xmax: 101.8861 ymax: 0.908519
## Geodetic CRS:  WGS 84
# Cek apakah data terbaca dengan benar untuk memastikan "POLYGON" atau "MULTIPOLYGON"
print(sumbar_sf)
## Simple feature collection with 19 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 98.59618 ymin: -4.01639 xmax: 101.8861 ymax: 0.908519
## Geodetic CRS:  WGS 84
## First 10 features:
##            NAME_1 ID_2             NAME_2    TYPE_2    ENGTYPE_2 Longitude
## 1  Sumatera Barat  381               Agam Kabupaten      Regency 100.16348
## 2  Sumatera Barat  382        Bukittinggi Kotamadya Municipality 100.37399
## 3  Sumatera Barat  383        Dharmasraya Kabupaten      Regency 101.54744
## 4  Sumatera Barat  384 Kepulauan Mentawai Kabupaten      Regency  99.34132
## 5  Sumatera Barat  385         Kota Solok Kotamadya Municipality 100.62103
## 6  Sumatera Barat  386    Lima Puluh Koto Kabupaten      Regency 100.57973
## 7  Sumatera Barat  387     Padang Panjang Kotamadya Municipality 100.42902
## 8  Sumatera Barat  388    Padang Pariaman Kabupaten      Regency 100.26020
## 9  Sumatera Barat  389             Padang Kotamadya Municipality 100.44859
## 10 Sumatera Barat  390           Pariaman Kotamadya Municipality 100.15671
##         Latitude                       geometry
## 1  -0.2524166310 MULTIPOLYGON (((99.9713 -0....
## 2  -0.2730771120 MULTIPOLYGON (((100.3629 -0...
## 3  -1.1424451741 MULTIPOLYGON (((101.4155 -1...
## 4  -1.8543412356 MULTIPOLYGON (((99.17167 -1...
## 5  -0.7651748393 MULTIPOLYGON (((100.5047 -0...
## 6  -0.0005993867 MULTIPOLYGON (((100.8411 -0...
## 7  -0.4576744644 MULTIPOLYGON (((100.4548 -0...
## 8  -0.6015144474 MULTIPOLYGON (((100.2918 -0...
## 9  -0.9772236331 MULTIPOLYGON (((100.5271 -0...
## 10 -0.6287070778 MULTIPOLYGON (((100.1654 -0...
st_geometry_type(sumbar_sf)  
##  [1] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
##  [6] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
## [11] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
## [16] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
## 18 Levels: GEOMETRY POINT LINESTRING POLYGON MULTIPOINT ... TRIANGLE
#file dbf
dbf_path <- "C:/Users/Zahra Mahendra Putri/Documents/STATISTIKA UNTIRTA/MATA KULIAH/SEMESTER 4/Eksplorasi Dan Visualisasi Data/Export_Output.dbf"
data_dbf <- read.dbf(dbf_path)
# Tampilkan beberapa baris awal
head(data_dbf)
#cek struktur data
glimpse(sumbar_sf)  
## Rows: 19
## Columns: 8
## $ NAME_1    <chr> "Sumatera Barat", "Sumatera Barat", "Sumatera Barat", "Sumat…
## $ ID_2      <dbl> 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, …
## $ NAME_2    <chr> "Agam", "Bukittinggi", "Dharmasraya", "Kepulauan Mentawai", …
## $ TYPE_2    <chr> "Kabupaten", "Kotamadya", "Kabupaten", "Kabupaten", "Kotamad…
## $ ENGTYPE_2 <chr> "Regency", "Municipality", "Regency", "Regency", "Municipali…
## $ Longitude <dbl> 100.16348, 100.37399, 101.54744, 99.34132, 100.62103, 100.57…
## $ Latitude  <dbl> -0.2524166310, -0.2730771120, -1.1424451741, -1.8543412356, …
## $ geometry  <MULTIPOLYGON [°]> MULTIPOLYGON (((99.9713 -0...., MULTIPOLYGON ((…
glimpse(data_dbf) 
## Rows: 19
## Columns: 7
## $ NAME_1    <fct> Sumatera Barat, Sumatera Barat, Sumatera Barat, Sumatera Bar…
## $ ID_2      <int> 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, …
## $ NAME_2    <fct> Agam, Bukittinggi, Dharmasraya, Kepulauan Mentawai, Kota Sol…
## $ TYPE_2    <fct> Kabupaten, Kotamadya, Kabupaten, Kabupaten, Kotamadya, Kabup…
## $ ENGTYPE_2 <fct> Regency, Municipality, Regency, Regency, Municipality, Regen…
## $ Longitude <dbl> 100.16348, 100.37399, 101.54744, 99.34132, 100.62103, 100.57…
## $ Latitude  <dbl> -0.2524166310, -0.2730771120, -1.1424451741, -1.8543412356, …
# Gabungkan berdasarkan ID_2
gabung.sumbar <- left_join(sumbar_sf, data_dbf, by = "ID_2")

#cek longitude
colnames(gabung.sumbar) 
##  [1] "NAME_1.x"    "ID_2"        "NAME_2.x"    "TYPE_2.x"    "ENGTYPE_2.x"
##  [6] "Longitude.x" "Latitude.x"  "NAME_1.y"    "NAME_2.y"    "TYPE_2.y"   
## [11] "ENGTYPE_2.y" "Longitude.y" "Latitude.y"  "geometry"
# Visualisasi peta dengan fill berdasarkan Longitude
plot.sumbar <- ggplot(data = gabung.sumbar) +
  geom_sf(aes(fill = Longitude.x)) +  
  scale_fill_distiller("Longitude", palette = "YlOrRd")

plot.sumbar