كيفية إنشاء مخطط إغاثة بسهولة في 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'))

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *