美文网首页
科研绘图之配对折线图

科研绘图之配对折线图

作者: Bioinfor生信云 | 来源:发表于2023-12-19 17:02 被阅读0次

    配对折线图

    配对折线图(Paired Line Chart)是一种用于展示两组相关数据变化趋势的图表。这种图表通常用于比较两个相关变量之间的关系,例如时间的推移、两个实验条件下的结果等。以下是配对折线图的详细介绍:

    结构和特点:

    1. 两组数据集: 配对折线图展示两组数据集的趋势,每组数据都有自己的折线,而这两条折线是成对出现的。

    2. 坐标轴: 通常,横轴表示时间、事件或者实验条件等,纵轴表示相关变量的数值。两个数据集的折线分别在同一坐标系中展示。

    3. 连接线: 每组数据集中相同位置的数据点通过一条连接线相连,突显了两组数据之间的关系。这种连接方式有助于直观地比较两组数据的趋势。

    4. 数据点标记: 每个数据点通常会标记相应的数值,以便更清晰地了解每个时间点或条件下的具体数值。

    用途和应用场景:

    1. 比较趋势: 配对折线图主要用于比较两组相关数据的趋势。例如,可以用于比较两个产品在不同市场中的销售情况,或者比较同一产品在不同时间段内的销售表现。

    2. 变化关系: 通过配对折线图,可以观察到两组数据之间的变化关系。这对于分析实验条件的效果、市场趋势的演变等方面非常有帮助。

    3. 对比效果: 通过直观地比较两组数据的走势,可以更容易地看出它们之间的差异。这有助于决策者更好地理解数据并制定相应的策略。

    制作注意事项:

    1. 数据匹配: 确保两组数据点在横轴上的位置是相互对应的,以便能够正确地呈现两组数据之间的关系。

    2. 清晰标注: 给图表添加标题、轴标签和图例,确保读者能够理解图表中呈现的信息。

    3. 颜色选择: 使用明显区分的颜色或样式来区分两组数据,以确保观众能够轻松区分它们。

    4. 趋势分析: 在图表中标记出趋势的重要点,例如峰值、谷值或趋势的转折点,以帮助观众更容易地分析数据。

    总体而言,配对折线图是一种强大的工具,可用于直观地比较两组相关数据的变化趋势,从而支持数据驱动的决策和分析。

    参考脚本

    library(tidyverse)
    H <- tibble(Triplet = str_c('Triplet', 1:7, sep = ' '),
                  From = c(rep('Zambia', 4), rep('South Africa', 3)), 
                  `Group A` = c('28/1687 (1.64)', 
                                '33/2086 (1.57)', 
                                '23/1695 (1.36)', 
                                '41/2013 (2.04)', 
                                '36/1507 (2.35)', 
                                '26/1808 (1.43)', 
                                '13/2195 (0.57)'),
                  `Group B` = c('19/1979 (0.94)', 
                                '29/2408 (1.20)', 
                                '22/1687 (1.30)', 
                                '19/1698 (1.13)', 
                                '33/1811 (1.80)', 
                                '26/2078 (1.24)', 
                                '10/2488 (0.40)'),
                  `Group C` = c('24/2054 (1.17)', 
                                '33/2262 (1.48)', 
                                '29/1811 (1.63)', 
                                '37/1561 (2.39)', 
                                '28/1304 (2.15)', 
                                '32/1375 (2.31)', 
                                '14/2195 (0.59)'))
    H
    
    

    以上数据不符合 ggplot2 绘图要求,使用 tidyverse 进行数据格式转换这里的重点:
    1.长格式与宽格式数据的转换: gather()
    2.一列拆分成多列: separate()

    library(tidyr)
    H<- gather(H, key = Group, value = Value, 3:5) %>%
      separate(col = Value, # 拆分这一列
               sep = ' ',  # 分割符
               into = c('Number', 'Ratio')) %>% # 分割成的两列
      separate(col = Number, 
               sep = '/', into = c('Num', 'Total')) %>%
      mutate(Ratio = as.numeric(str_remove_all(Ratio, '\\(|\\)')),
             Num = as.numeric(Num),
             Total = as.numeric(Total))
    H
    

    画图,这里的重点是: 不同 Group 的标签分别向左右偏移,所以需要分开画

    library(ggrepel)
    library(ggsci)
    library(cowplot)
    p1 <- ggplot(data = filter(H, Group %in% c('Group A', 'Group C')), 
           aes(x = Group, y = Ratio, color = Triplet)) +
      geom_line(aes(group = Triplet)) +
      geom_point(aes(size = Num)) +
      geom_text_repel(data = filter(H, Group == 'Group A'),
                      nudge_x = -0.15,
                      show.legend = F,
                      color = 'black',
                      segment.size = 0,
                      aes(label = str_remove(Triplet, 'Triplet '))) +
      geom_text_repel(data = filter(H, Group == 'Group C'),
                      nudge_x = 0.15,
                      show.legend = F,
                      color = 'black',
                      segment.size = 0,
                      aes(label = str_remove(Triplet, 'Triplet '))) +
      
      scale_color_jco() +
      scale_size(name = 'No. of Envents:',
                 breaks = seq(10, 40, 10),
                 labels = seq(10, 40, 10),
                 limits = c(10, 50),
                 range = c(1, 4)) +
      scale_y_continuous(expand = c(0, 0), limits = c(0, 2.5)) +
      labs(x = '', y = 'H Infections\n(per 100 persons)') +
      theme_half_open() 
    
    p2 <- ggplot(data = filter(H, Group %in% c('Group A', 'Group B')), 
           aes(x = Group, y = Ratio, color = Triplet)) +
      geom_line(aes(group = Triplet)) +
      geom_point(aes(size = Num)) +
      geom_text_repel(data = filter(HIV, Group == 'Group A'),
                      nudge_x = -0.15,
                      color = 'black',
                      segment.size = 0,
                      show.legend = F,
                      aes(label = str_remove(Triplet, 'Triplet '))) +
      geom_text_repel(data = filter(H, Group == 'Group B'),
                      nudge_x = 0.15,
                      color = 'black',
                      segment.size = 0,
                      show.legend = F,
                      aes(label = str_remove(Triplet, 'Triplet '))) +
      
      scale_color_jco() +
      scale_size(name = 'No. of Envents:',
                 breaks = seq(10, 40, 10),
                 labels = seq(10, 40, 10),
                 limits = c(10, 50),
                 range = c(1, 4)) +
      scale_y_continuous(expand = c(0, 0), limits = c(0, 2.5)) +
      labs(x = '', y = 'H Infections\n(per 100 persons)') +
      theme_half_open() 
    
    

    欢迎关注Bioinfor 生信云!

    相关文章

      网友评论

          本文标题:科研绘图之配对折线图

          本文链接:https://www.haomeiwen.com/subject/qwuagdtx.html