科研绘图之配对折线图

2023-12-19  本文已影响0人  Bioinfor生信云

配对折线图

配对折线图(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 生信云!

上一篇下一篇

猜你喜欢

热点阅读