Cara mudah membuat plot relief di r menggunakan ggplot2
Bagan tambahan adalah jenis bagan yang menunjukkan peringkat kelompok yang berbeda dari waktu ke waktu, bukan nilai absolut, untuk menekankan urutan kelompok, bukan jumlah perubahannya.
Tutorial ini menjelaskan cara mudah membuat bump plot di R menggunakan ggplot2.
Contoh: membuat grafik relief
Untuk membuat diagram bump di R, pertama-tama kita perlu memuat dua paket: dplyr dan ggplot2 :
library(ggplot2) #for creating bump chart library(dplyr) #for manipulating data
Selanjutnya, kita akan membuat beberapa data untuk digunakan:
#set the seed to make this example reproducible
set.seed(10)
data <- data.frame(team = rep(LETTERS[1:5], each = 10),
random_num = runif(50),
day = rep(1:10, 5))
data <- data %>%
group_by(day) %>%
arrange(day, desc(random_num), team) %>%
mutate(rank = row_number()) %>%
A group()
head(data)
# team random_num day rank
#1 C 0.865 1 1
#2 B 0.652 1 2
#3 D 0.536 1 3
#4 A 0.507 1 4
#5 E 0.275 1 5
#6 C 0.615 2 1
Basis data ini hanya menampilkan “peringkat” lima tim berbeda selama periode 10 hari.
Kita dapat menggunakan ggplot2 untuk membuat bagan kemajuan guna memvisualisasikan peringkat setiap tim setiap hari selama periode ini:
ggplot(data, aes(x = day, y = rank, group = team)) + geom_line(aes(color = team, alpha = 1), size = 2) + geom_point(aes(color = team, alpha = 1), size = 4) + scale_y_reverse(breaks = 1:nrow(data))
Bagan tambahan ini menampilkan data dalam format yang Anda inginkan, tetapi cukup jelek. Dengan sedikit perubahan estetika kita bisa membuat lukisan ini menjadi lebih baik.
Sesuaikan gaya grafis benjolan
Untuk menyempurnakan tampilan grafik, kita dapat menggunakan tema berikut yang dibuat oleh Dominik Koch :
my_theme <- function() { # Colors color.background = "white" color.text = "#22211d" # Begin construction of chart theme_bw(base_size=15) + # Format background colors theme(panel.background = element_rect(fill=color.background, color=color.background)) + theme(plot.background = element_rect(fill=color.background, color=color.background)) + theme(panel.border = element_rect(color=color.background)) + theme(strip.background = element_rect(fill=color.background, color=color.background)) + # Format the grid theme(panel.grid.major.y = element_blank()) + theme(panel.grid.minor.y = element_blank()) + theme(axis.ticks = element_blank()) + # Format the legend theme(legend.position = "none") + # Format title and axis labels theme(plot.title = element_text(color=color.text, size=20, face = "bold")) + theme(axis.title.x = element_text(size=14, color="black", face = "bold")) + theme(axis.title.y = element_text(size=14, color="black", face = "bold", vjust=1.25)) + theme(axis.text.x = element_text(size=10, vjust=0.5, hjust=0.5, color = color.text)) + theme(axis.text.y = element_text(size=10, color = color.text)) + theme(strip.text = element_text(face = "bold")) + # Plot margins theme(plot.margin = unit(c(0.35, 0.2, 0.3, 0.35), "cm")) }
Kita akan membuat bagan tambahan lagi, namun kali ini kita akan menghapus legenda, menambahkan beberapa label bagan, dan menggunakan tema yang ditentukan dalam kode di atas:
ggplot(data, aes(x = as.factor(day), y = rank, group = team)) + geom_line(aes(color = team, alpha = 1), size = 2) + geom_point(aes(color = team, alpha = 1), size = 4) + geom_point(color = "#FFFFFF", size = 1) + scale_y_reverse(breaks = 1:nrow(data)) + scale_x_discrete(breaks = 1:10) + theme(legend.position = 'none') + geom_text(data = data %>% filter(day == "1"), aes(label = team, x = 0.5), hjust = .5, fontface = "bold", color = "#888888", size = 4) + geom_text(data = data %>% filter(day == "10"), aes(label = team, x = 10.5), hjust = 0.5, fontface = "bold", color = "#888888", size = 4) + labs(x = 'Day', y = 'Rank', title = 'Team Ranking by Day') + my_theme()
Kita juga dapat dengan mudah menyorot salah satu baris dengan menambahkan argumen scale_color_manual() . Misalnya, dalam kode berikut, kita membuat garis Tim A menjadi ungu dan semua garis lainnya menjadi abu-abu:
ggplot(data, aes(x = as.factor(day), y = rank, group = team)) +
geom_line(aes(color = team, alpha = 1), size = 2) +
geom_point(aes(color = team, alpha = 1), size = 4) +
geom_point(color = "#FFFFFF", size = 1) +
scale_y_reverse(breaks = 1:nrow(data)) +
scale_x_discrete(breaks = 1:10) +
theme(legend.position = 'none') +
geom_text(data = data %>% filter(day == "1"),
aes(label = team, x = 0.5), hjust = .5,
fontface = "bold", color = "#888888", size = 4) +
geom_text(data = data %>% filter(day == "10"),
aes(label = team, x = 10.5), hjust = 0.5,
fontface = "bold", color = "#888888", size = 4) +
labs(x = 'Day', y = 'Rank', title = 'Team Ranking by Day') +
my_theme() +
scale_color_manual(values = c('purple', 'grey', 'grey', 'grey', 'grey'))
Kita juga dapat menyorot beberapa baris jika kita ingin:
ggplot(data, aes(x = as.factor(day), y = rank, group = team)) +
geom_line(aes(color = team, alpha = 1), size = 2) +
geom_point(aes(color = team, alpha = 1), size = 4) +
geom_point(color = "#FFFFFF", size = 1) +
scale_y_reverse(breaks = 1:nrow(data)) +
scale_x_discrete(breaks = 1:10) +
theme(legend.position = 'none') +
geom_text(data = data %>% filter(day == "1"),
aes(label = team, x = 0.5), hjust = .5,
fontface = "bold", color = "#888888", size = 4) +
geom_text(data = data %>% filter(day == "10"),
aes(label = team, x = 10.5), hjust = 0.5,
fontface = "bold", color = "#888888", size = 4) +
labs(x = 'Day', y = 'Rank', title = 'Team Ranking by Day') +
my_theme() +
scale_color_manual(values = c('purple', 'steelblue', 'grey', 'grey', 'grey'))