Yau (2013) menjelaskan bahwa unsur dalam visualisasi data dapat diuraikan sebagai berikuti ini.
Visual Cue
Colors
Ilustrasi berikut ini akan menggunakan data CIACountries
yang tersedia di package mdsr
. Silahkan menginstall package tersebut terlebih dulu.
library(mdsr)
library(tidyverse)
data("CIACountries")
glimpse(CIACountries)
## Rows: 236
## Columns: 8
## $ country <chr> "Afghanistan", "Albania", "Algeria", "American Samoa", "Ando~
## $ pop <dbl> 32564342, 3029278, 39542166, 54343, 85580, 19625353, 16418, ~
## $ area <dbl> 652230, 28748, 2381741, 199, 468, 1246700, 91, 443, 2780400,~
## $ oil_prod <dbl> 0, 20510, 1420000, 0, NA, 1742000, NA, 0, 532100, 0, 0, 3543~
## $ gdp <dbl> 1900, 11900, 14500, 13000, 37200, 7300, 12200, 23600, 22600,~
## $ educ <dbl> NA, 3.3, 4.3, NA, NA, 3.5, 2.8, 2.4, 6.3, 3.3, 6.0, 5.6, 5.9~
## $ roadways <dbl> 0.06462444, 0.62613051, 0.04771929, 1.21105528, 0.68376068, ~
## $ net_users <fct> >5%, >35%, >15%, NA, >60%, >15%, >15%, >60%, >35%, >35%, >60~
Data CIACountries
terdiri dari 236 pengamatan dan 8 peubah, untuk melihat detil deskripsi data dapat digunakan fungsi help()
, atau dengan membuka link berikut ini: https://www.rdocumentation.org/packages/mdsr/versions/0.2.4/topics/CIACountries
help(CIACountries)
Pertama, seandainya kita ingin menginvestigasi hubungan antara peubah educ
(education spending (% of GDP) ) dengan gdp
(Gross Domestic Product per capita ($/person)) tanpa memperhatikan informasi lain.
library(ggplot2)
ggplot(data = CIACountries, aes(y = gdp, x = educ))
g <-+ geom_point(size = 3) g
Apabila diperhatikan pula berdasarkan peubah net_users
(fraction of internet users (% of population)), ternyata negara dengan fraksi pengguna internet di atas 60% cenderung memiliki rata-rata GDP yg lebih tinggi, serta korelasi yang lebih tinggi antara gdp
dan educ
.
+ geom_point(aes(color = net_users), size = 3) g
Scale
Scale dapat pula dimanfaatkan untuk menambah informasi, apabila dianggap relevan.
+ geom_point(aes(color = net_users, size = roadways)) g
Transformasi juga dapat dilakukan untuk memudahkan dalam melihat pola hubungan.
+ geom_point(aes(color = net_users, size = roadways)) +
g coord_trans(y = "log10")
+ geom_point(aes(color = net_users, size = roadways)) +
g scale_y_continuous(name = "Gross Domestic Product", trans = "log10")
Layers & Facets
ggplot(data = SAT_2010, aes(x = expenditure, y = math)) + geom_point()
g2 <- g2 + geom_smooth(method = "lm", se = 0) +
g2 <-xlab("Average expenditure per student ($1000)") +
ylab("Average score on math SAT")
2010 <- SAT_2010 %>%
SAT_mutate(SAT_rate = cut(sat_pct, breaks = c(0,30,60,100),
labels = c("low", "medium", "high")))
g2 %+% SAT_2010
g2 <-+ aes(color = SAT_rate) g2
library(NHANES)
ggplot(data = sample_n(NHANES, size = 1000),
aes(x = Age, y = Height, color = Gender)) +
geom_point() + geom_smooth() + xlab("Age (years)") + ylab("Height (cm)")
+ geom_point(alpha = 0.9, aes(size = roadways)) + coord_trans(y="log10") +
g facet_wrap(~net_users, nrow = 1) + theme(legend.position = "top")
Position
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, colour = cut))
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = cut))
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity))
ggplot(data = diamonds, mapping = aes(x = cut, fill = clarity)) +
geom_bar(alpha = 1/5, position = "identity")
ggplot(data = diamonds, mapping = aes(x = cut, colour = clarity)) +
geom_bar(fill = NA, position = "identity")
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy), position = "jitter")
Coordinate System
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot()
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot() +
coord_flip()
map_data("nz")
nz <-
ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black")
ggplot(nz, aes(long, lat, group = group)) +
geom_polygon(fill = "white", colour = "black") +
coord_quickmap()
ggplot(data = diamonds) +
bar <- geom_bar(
mapping = aes(x = cut, fill = cut),
show.legend = FALSE,
width = 1
+
) theme(aspect.ratio = 1) +
labs(x = NULL, y = NULL)
+ coord_flip() bar
+ coord_polar() bar
Illustration: Historical baby names
Berikut ini adalah contoh yang dirujuk dari Baumer et al. (2017). Data yang akan digunakan dapat diakses pada package babynames
. Pada kasus ini kita akan menggunakan fungsi make_babynames_dist()
untuk mengakses data babynames
dengan menambahkan kolom estimasi banyaknya orang yang hidup pada tahun 2014.
library(babynames)
make_babynames_dist()
BabynamesDist <-head(BabynamesDist, 2)
## # A tibble: 2 x 9
## year sex name n prop alive_prob count_thousands age_today
## <dbl> <chr> <chr> <int> <dbl> <dbl> <dbl> <dbl>
## 1 1900 F Mary 16706 0.0526 0 16.7 114
## 2 1900 F Helen 6343 0.0200 0 6.34 114
## # ... with 1 more variable: est_alive_today <dbl>
Seandainya kita ingin menampilkan informasi tentang banyaknya orang bernama Josephs yang lahir setiap tahunnya, serta banyaknya di antara mereka yang diharapkan masih hidup.
BabynamesDist %>%
joseph <-filter(name == "Joseph" & sex == "M")
ggplot(data = joseph, aes(x = year)) name_plot <-
Pertama, kita menambahkan histogram dari data banyaknya orang bernama Joseph yang diharapkan masih hidup. Berdasarkan tahun kelahirannya.
name_plot +
name_plot <-geom_bar(stat = "identity", aes(y = count_thousands * alive_prob),
fill = "#b2d7e9", colour = "white")
name_plot
Selanjutnya, kita menambahkan kurva yang menggambarkan banyaknya orang bernama Joseph yang lahir pada setiap tahun yang diamati.
name_plot + geom_line(aes(y = count_thousands), size = 2) name_plot <-
name_plot +
name_plot <-ylab("Number of People (thousands)") + xlab(NULL)
name_plot
Kita dapat menggunakan fungsi summary()
untuk memastikan apakah fungsi yang digunakan sudah tepat untuk menjawab pertanyaan yang diteliti.
summary(name_plot)
## data: year, sex, name, n, prop, alive_prob, count_thousands, age_today,
## est_alive_today [111x9]
## mapping: x = ~year
## faceting: <ggproto object: Class FacetNull, Facet, gg>
## compute_layout: function
## draw_back: function
## draw_front: function
## draw_labels: function
## draw_panels: function
## finish_data: function
## init_scales: function
## map_data: function
## params: list
## setup_data: function
## setup_params: function
## shrink: TRUE
## train_scales: function
## vars: function
## super: <ggproto object: Class FacetNull, Facet, gg>
## -----------------------------------
## mapping: y = ~count_thousands * alive_prob
## geom_bar: width = NULL, na.rm = FALSE, orientation = NA
## stat_identity: na.rm = FALSE
## position_stack
##
## mapping: y = ~count_thousands
## geom_line: na.rm = FALSE, orientation = NA
## stat_identity: na.rm = FALSE
## position_identity
Kita dapat menambahkan informasi median dari tahun kelahiran dengan menjalankan code berikut.
#install.packages("Hmisc")
Hmisc::wtd.quantile
wtd.quantile <-
median_yob <-with(joseph, wtd.quantile(year, est_alive_today, probs = 0.5))
median_yob
## 50%
## 1975
name_plot +
name_plot <-geom_bar(stat = "identity", colour = "white", fill = "#008fd5",
aes(y = ifelse(year == median_yob, est_alive_today / 1000, 0)))
Terakhir, tambahan informasi berupa teks yang dapat membantu pembaca memahami grafik yang disajikan.
+
name_plot ggtitle("Age Distribution of American Boys Named Joseph") +
geom_text(x = 1935, y = 40, label = "Number of Josephs\nborn each year") +
geom_text(x = 1915, y = 13, label =
"Number of Josephs\nborn each year\nestimated to be alive\non 1/1/2014",
colour = "#b2d7e9") +
geom_text(x = 2003, y = 40,
label = "The median\nliving Joseph\nis 37 years old",
colour = "darkgray") +
geom_curve(x = 1995, xend = 1974, y = 40, yend = 24,
arrow = arrow(length = unit(0.3,"cm")), curvature = 0.5) + ylim(0, 42)
References
Baumer, B. S., Kaplan, D. T., & Horton, N. J. (2017). Modern data science with R. CRC Press.
Wickham, H., & Grolemund, G. (2016). R for data science: import, tidy, transform, visualize, and model data. " O’Reilly Media, Inc.".
Yau, N. (2013). Data points: visualization that means something. John Wiley & Sons.