R memiliki sekumpulan fasilitas grafik yang sangat kaya. Informasi ini dapat dilihat pada R Graph Gallery (Matloff, 2011)
Salah satu keunggulan R dibandingkan dengan software
statistika lainnya adalah kemampuan menghasilkan grafik yang sangat
kaya, baik untuk membuat plot untuk eksplorasi data awal, validasi
model, atau untuk keperluan publikasi. Setidaknya ada tiga sistem utama
untuk menghasilkan grafik dalam R yaitu grafik R dasar (base R
graphics), lattice dan ggplot2.
Masing-masing sistem ini memiliki kelebihan dan kelemahannya
masing-masing.
Untuk memulai mari lihat fungsi dasar dalam membuat grafik:
plot(). Kemudian eksplorasi tahapan membuat grafik dengan
menambahkan garis dan titik untuk melampirkan legenda.
plot()Pilihan tipe yang digunakan:
p” for points,l” for lines,b” for both,c” for the lines part alone of “b”,o” for both ‘overplotted’,h” for ‘histogram’ like (or ‘high-density’) vertical
lines,s” for stair steps,S” for other steps, see ‘Details’ below,n” for no plotting.Buatlah scatter plot seperti gambar berikut
# data awal
x <- 1:40
y <- rnorm(40,5,1)
# data baru
x1 <- 41:50
y1 <- rnorm(10,5,1)
# scatter plot dg data awal
plot(x, y, type="p",
xlab="Sumbu x",
ylab="Sumbu y",
main="Bilangan Acak Normal",
col=topo.colors(40),
pch=16, cex=2, xlim=c(0,50), ylim=c(2.5,7.5))
# plot data baru
points(x1, y1, cex=2)
#menambahkan garis
x2 <- rep(40.5,20)
y2 <- seq(min(c(y,y1)), max(c(y,y1)), length=20)
abline(v = 40.2, col="blue")
abline(h=mean(y), col="red", lwd=2.5)abline(a=2, b=1/10, col="purple", lwd=2, lty=2)
#menambahkan tanda panah
arrows(x0=30, y0=3.5, x1=40, y1=mean(y)-.1, lwd=2)
#menambahkan tulisan
text(x=29,y=3.3, labels="Titik potong", cex=0.7)
text(x=3,y=7.3, labels="Data awal", cex=0.7)
4 6 8
11 7 14
barplot(counts,
col = c("#ffd166","#06d6a0"), #custom colors
legend = rownames(counts),
cex.names=.8)mytable <- table(iris$Species)
lbls <- paste(names(mytable), "\n", mytable, sep="")
pie(mytable, labels = lbls,
main="Pie Chart of Species\n (with sample sizes)")plot()Buatlah density histogram dan kurva dari contoh acak yang menyebar Chi-Squared dengan derajat bebas 4.
Buat empat grafik dalam satu windows, dengan format berikut:
ggplot2ggplot(mtcars, aes(x=as.factor(cyl), fill=as.factor(cyl) )) +
geom_bar( ) +
theme(legend.position="none")
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
# Create Data
data <- data.frame(
group=LETTERS[1:5],
value=c(13,7,9,21,2)
)
# Compute the position of labels
data <- data %>%
arrange(desc(group)) %>%
mutate(prop = value / sum(data$value) *100) %>%
mutate(ypos = cumsum(prop)- 0.5*prop )
# Basic piechart
ggplot(data, aes(x="", y=prop, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() +
theme(legend.position="none") +
geom_text(aes(y = ypos, label = group), color = "white", size=6) +
scale_fill_brewer(palette="Set1")plotly# https://www.r-graph-gallery.com/321-introduction-to-interactive-sankey-diagram-2.html
library(networkD3)Warning: package ‘networkD3’ was built under R version 4.2.2
library(dplyr)
# A connection data frame is a list of flows with intensity for each flow
links <- data.frame(
source=c("group_A","group_A", "group_B", "group_C", "group_C", "group_E"),
target=c("group_C","group_D", "group_E", "group_F", "group_G", "group_H"),
value=c(2,3, 2, 3, 1, 3)
)
# From these flows we need to create a node data frame: it lists every entities involved in the flow
nodes <- data.frame(
name=c(as.character(links$source),
as.character(links$target)) %>% unique()
)
# With networkD3, connection must be provided using id, not using real name like in the links dataframe.. So we need to reformat it.
links$IDsource <- match(links$source, nodes$name)-1
links$IDtarget <- match(links$target, nodes$name)-1
# Make the Network
p <- sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "name",
sinksRight=FALSE)
pShape file diperoleh dari: data.humdata.org
Rows: 6
Columns: 17
$ Shape_Leng <dbl> 0.3644271, 0.3413273, 0.1849809, 0.1943379, 0.2430896, 0.2357695
$ Shape_Area <dbl> 0.0018624008, 0.0025144096, 0.0006540943, 0.0008671386, 0.0015239343,…
$ ADM3_EN <chr> "Bogor Barat", "Bogor Selatan", "Bogor Tengah", "Bogor Timur", "Bogor…
$ ADM3_PCODE <chr> "ID3271050", "ID3271010", "ID3271040", "ID3271020", "ID3271030", "ID3…
$ ADM3_REF <chr> NA, NA, NA, NA, NA, NA
$ ADM3ALT1EN <chr> NA, NA, NA, NA, NA, NA
$ ADM3ALT2EN <chr> NA, NA, NA, NA, NA, NA
$ ADM2_EN <chr> "Kota Bogor", "Kota Bogor", "Kota Bogor", "Kota Bogor", "Kota Bogor",…
$ ADM2_PCODE <chr> "ID3271", "ID3271", "ID3271", "ID3271", "ID3271", "ID3271"
$ ADM1_EN <chr> "Jawa Barat", "Jawa Barat", "Jawa Barat", "Jawa Barat", "Jawa Barat",…
$ ADM1_PCODE <chr> "ID32", "ID32", "ID32", "ID32", "ID32", "ID32"
$ ADM0_EN <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Ind…
$ ADM0_PCODE <chr> "ID", "ID", "ID", "ID", "ID", "ID"
$ date <date> 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-2…
$ validOn <date> 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-0…
$ validTo <date> NA, NA, NA, NA, NA, NA
$ geometry <POLYGON [°]> POLYGON ((106.7649 -6.53983..., POLYGON ((106.7961 -6.60695..., POLYG…
Simple feature collection with 6 features and 22 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: 106.735 ymin: -6.679585 xmax: 106.8488 ymax: -6.510802
Geodetic CRS: WGS 84
Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM3_REF ADM3ALT1EN ADM3ALT2EN
1 0.3644271 0.0018624008 Bogor Barat ID3271050 <NA> <NA> <NA>
2 0.3413273 0.0025144096 Bogor Selatan ID3271010 <NA> <NA> <NA>
3 0.1849809 0.0006540943 Bogor Tengah ID3271040 <NA> <NA> <NA>
4 0.1943379 0.0008671386 Bogor Timur ID3271020 <NA> <NA> <NA>
5 0.2430896 0.0015239343 Bogor Utara ID3271030 <NA> <NA> <NA>
6 0.2357695 0.0017147180 Tanah Sereal ID3271060 <NA> <NA> <NA>
ADM2_EN ADM2_PCODE ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn
1 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
2 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
3 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
4 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
5 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
6 Kota Bogor ID3271 Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
validTo Kota Kecamatan KodeKemendagri JumlahPenduduk LuasWilayah
1 <NA> Kota Bogor Bogor Barat 32.71.04 244708 23.08
2 <NA> Kota Bogor Bogor Selatan 32.71.04 208185 31.16
3 <NA> Kota Bogor Bogor Tengah 32.71.04 106359 8.11
4 <NA> Kota Bogor Bogor Timur 32.71.04 105233 10.75
5 <NA> Kota Bogor Bogor Utara 32.71.04 192837 18.88
6 <NA> Kota Bogor Tanah Sareal 32.71.04 218135 21.25
KepadatanPenduduk geometry
1 10603 POLYGON ((106.7649 -6.53983...
2 6681 POLYGON ((106.7961 -6.60695...
3 13115 POLYGON ((106.7885 -6.57350...
4 9789 POLYGON ((106.8315 -6.60529...
5 10214 POLYGON ((106.8183 -6.53854...
6 10265 POLYGON ((106.7822 -6.51169...
Peta statis dapat dibuat menggunakan ggplot2
colorPalette = RColorBrewer::brewer.pal(5,"YlGnBu")
legendBreak = c(120,170,230)*1000
yBreak = seq(106.72, 106.86, by=0.04)
p + scale_fill_gradientn(colors = colorPalette,
breaks = legendBreak,
name = "Jumlah Penduduk") +
labs(title = "Jumlah Penduduk Kota Bogor") +
theme(legend.text = element_text(size=7),
legend.title = element_text(size=7),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
title = element_text(size=12, face='bold')) +
scale_x_continuous(breaks = yBreak) Peta statis dapat dibuat menggunakan leaflet
Berikut perintah-perintah untuk menampilkan jumlah penduduk Kota Bogor dengan peta leaflet.
leaflet(): inisiasi peta dengan memanggil fungsi
leaflet()addProviderTiles(): menambahkan peta dasar (base
map) dengan perintahaddPolygons(): menabahkan poligon dengan gradasi warna
berdasarkan jumlah penduduk. Pengaturan warna gradasi menggunakan
colorNumeric(). Ditambahkan pula opsi label untu
menampilkan popup, yang akan muncul ketika pengguna menyorot
area tertentu.addLegend(): menambahkan legendaaddLayersControl(): menampilkan tombol untuk memilih
layer yang akan ditampilkansetView(): mengatur posisi dan zooming
default# membuat custom palette warna
populationPalette <- colorNumeric(
palette = "YlGnBu",
domain = mapBogor$JumlahPenduduk
)
# membuat custom popup
popupLabel <- paste0(
"<b>Kecamatan ", mapBogor$Kecamatan,"</b><br/>",
"Jumlah Penduduk (jiwa): ", mapBogor$JumlahPenduduk, "<br/>",
"Luas Wilayah (km2): ", mapBogor$LuasWilayah, "<br/>",
"Kepadatan Penduduk (jiwa/km2): ", mapBogor$KepadatanPenduduk) %>%
lapply(htmltools::HTML)
# membuat peta leaflet
leaflet(mapBogor) %>%
addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
addPolygons(weight = 1,
opacity = 1,
fillOpacity = 0.9,
label = popupLabel,
color = ~populationPalette(JumlahPenduduk),
highlightOptions = highlightOptions(color = "white",
weight = 2,
bringToFront = TRUE) ) %>%
addLegend(position = "bottomright",
pal = populationPalette,
values = ~JumlahPenduduk,
title = "Jumlah\nPenduduk",
opacity = 1) %>%
addLayersControl(position = 'topright',
baseGroups = c("Light Mode", "Dark Mode"),
options = layersControlOptions(collapsed = FALSE)) %>%
setView(lat = - 6.595, lng = 106.87, zoom = 12)Statistika dan Sains Data, IPB University, alfanugraha@apps.ipb.ac.id↩︎