كيفية إنشاء مخطط إغاثة بسهولة في r باستخدام ggplot2
المخطط الكبير هو نوع من المخططات التي تظهر ترتيب المجموعات المختلفة بمرور الوقت بدلاً من القيم المطلقة للتأكيد على ترتيب المجموعات بدلاً من مقدار التغيير.
يشرح هذا البرنامج التعليمي كيفية إنشاء مخطط نتوء بسهولة في لغة R باستخدام ggplot2.
مثال: إنشاء رسم إغاثة
لإنشاء مخطط عثرة في R، نحتاج أولاً إلى تحميل حزمتين: dplyr و ggplot2 :
library(ggplot2) #for creating bump chart library(dplyr) #for manipulating data
بعد ذلك، سنقوم بإنشاء بعض البيانات للعمل معها:
#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
تعرض قاعدة البيانات هذه ببساطة “تصنيفات” خمسة فرق مختلفة خلال فترة 10 أيام.
يمكننا استخدام ggplot2 لإنشاء مخطط تقدم لتصور ترتيب كل فريق خلال كل يوم خلال هذه الفترة:
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))
يعرض هذا المخطط التفصيلي البيانات بالتنسيق الذي تريده، ولكنه قبيح جدًا. مع بعض التغييرات الجمالية يمكننا أن نجعل هذه اللوحة أفضل بكثير.
قم بتصميم رسم النتوء
لتحسين مظهر الرسم البياني، يمكننا استخدام الموضوع التالي الذي أنشأه دومينيك كوخ :
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")) }
سنقوم بإنشاء المخطط التفصيلي مرة أخرى، ولكن هذه المرة سنقوم بإزالة وسيلة الإيضاح وإضافة بعض تسميات المخطط واستخدام السمة المحددة في الكود أعلاه:
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() . على سبيل المثال، في التعليمة البرمجية التالية، نجعل خط الفريق “أ” باللون الأرجواني وجميع الخطوط الأخرى باللون الرمادي:
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'))
يمكننا أيضًا تسليط الضوء على أسطر متعددة إذا أردنا:
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'))