SCI高分秘籍:掌握三线表,让你的论文脱颖而出!
在SCI科研论文中,图表是展示数据的关键元素,而三线表
更是其中的经典代表之一。它不仅能清晰、简洁地传递信息,还能让你的数据展示更加专业、易读。
那么,究竟什么是三线表?如何在论文中高效运用?今天就带你深入了解,助力你的科研写作!
什么是三线表?
三线表,又称三横线表,是一种简洁明了的表格设计方式,它仅用三条水平线来区分表格内容:
顶线:位于表格的最上方,用来区分表头和正文。 中线:位于表头和数据内容之间,起到分隔表头与数据的作用。 底线:位于表格的最下方,标记表格的结束。
三线表的优势
视觉简洁:减少冗余线条,让数据更加直观、整洁,阅读体验佳。 符合国际标准:三线表被广泛应用于高水平SCI期刊,使用这种格式能让你的论文更符合学术规范。 数据突出:精简的设计让数据成为表格的绝对主角,避免其他元素的干扰。
接下来我们正式进入绘制图表的部分吧!
一、你好!三线表
三线表的设计原则是去除冗余,避免过多的线条让数据显得杂乱无章。这种简洁的布局特别适合展示实验结果、统计数据等,能够帮助读者迅速抓住核心信息。
下面我们将展示一个经典的三线表应用案例,快速对比数值差异。通过三线表,我们能够清晰地看到数据的显著变化,无冗余元素干扰。
二、开始画图啦!
数据展示
pacman::p_load(
rio, # import/export
here, # file pathways
flextable, # make HTML tables
officer, # helper functions for tables
tidyverse) # data management, summary, and visualization
导入R包
library(tidyr)
library(dplyr)
导入数据
linelist <- import("linelist_cleaned.rds")
数据预处理
table <- linelist %>%
# 获得每个医院病人不同结局组的总数
###############################################
group_by(hospital, outcome) %>% # Group data
summarise( # Create new summary columns of indicators of interest
N = n(), # Number of rows per hospital-outcome group
ct_value = median(ct_blood, na.rm=T)) %>% # median CT value per group
############
bind_rows( # Bind the previous table with this mini-table of totals
linelist %>%
filter(!is.na(outcome) & hospital != "Missing") %>%
group_by(outcome) %>% # Grouped only by outcome, not by hospital
summarise(
N = n(), # Number of rows for whole dataset
ct_value = median(ct_blood, na.rm=T))) %>% # Median CT for whole dataset
转换数据为宽数据
mutate(hospital = replace_na(hospital, "Total")) %>%
pivot_wider( # Pivot from long to wide
values_from = c(ct_value, N), # new values are from ct and count columns
names_from = outcome) %>% # new column names are from outcomes
mutate( # Add new columns
N_Known = N_Death + N_Recover, # number with known outcome
Pct_Death = scales::percent(N_Death / N_Known, 0.1), # percent cases who died (to 1 decimal)
Pct_Recover = scales::percent(N_Recover / N_Known, 0.1)) %>% # percent who recovered (to 1 decimal)
select( # Re-order columns
hospital, N_Known, # Intro columns
N_Recover, Pct_Recover, ct_value_Recover, # Recovered columns
N_Death, Pct_Death, ct_value_Death) %>% # Death columns
arrange(N_Known) # Arrange rows from lowest to highest (Total row at bottom)
table
创建基础三线表
my_table <- flextable(table)
my_table
列宽调整
S# autofit()函数可以很好地展开表格,使每个单元格只有一行文本
my_table %>% autofit()
# 我们也可以使用qflextable()快速实现上述效果:
qflextable(table)
# 自定义列宽:
my_table <- my_table %>%
width(j=1, width = 2.7) %>%
width(j=2, width = 1.5) %>%
width(j=c(4,5,7,8), width = 1)
my_table
设置列标题
my_table <- my_table %>%
# 添加标题行:
add_header_row(
top = TRUE, # New header goes on top of existing header row
values = c("Hospital", # Header values for each column below
"Total cases with known outcome",
"Recovered", # This will be the top-level header for this and two next columns
"",
"",
"Died", # This will be the top-level header for this and two next columns
"", # Leave blank, as it will be merged with "Died"
"")) %>%
# 设置标题行的标签:
set_header_labels(
hospital = "",
N_Known = "",
N_Recover = "Total",
Pct_Recover = "% of cases",
ct_value_Recover = "Median CT values",
N_Death = "Total",
Pct_Death = "% of cases",
ct_value_Death = "Median CT values") %>%
merge_at(i = 1, j = 3:5, part = "header") %>% # Horizontally merge columns 3 to 5 in new header row
merge_at(i = 1, j = 6:8, part = "header") # Horizontally merge columns 6 to 8 in new header row
my_table
边框和背景
# 定义线的颜色和宽度等:
border_style = officer::fp_border(color="black", width=1)
# 加框线:
my_table <- my_table %>%
# 移除所有框线:
border_remove() %>%
# 通过已有的主题设置添加水平线
theme_booktabs() %>%
# 添加竖线分开恢复和死亡部分
vline(part = "all", j = 2, border = border_style) %>% # at column 2
vline(part = "all", j = 5, border = border_style) # at column 5
my_table
字体和对齐
my_table <- my_table %>%
flextable::align(align = "center", j = c(2:8), part = "all") %>%
# 调整列标题字体:
fontsize(i = 1, size = 12, part = "header") %>%
# 调整列标题的font face:
bold(i = 1, bold = TRUE, part = "header") %>%
# 此外,也可以指定调整第7行的字体:
bold(i = 7, bold = TRUE, part = "body")
my_table
合并单元格
my_table <- my_table %>%
merge_at(i = 1:2, j = 1, part = "header") %>%
merge_at(i = 1:2, j = 2, part = "header")
my_table
背景设置
my_table <- my_table %>%
bg(part = "body", bg = "gray95")
my_table
条件格式
my_table %>%
bg(j = 7, i = ~ Pct_Death >= 55, part = "body", bg = "red")
my_table %>%
bg(., i= ~ hospital == "Military Hospital", part = "body", bg = "#91c293")
扩展
本次绘图我们用到了两个特别重要的R包。加深对两个包的了解,能够让我们清楚数据处理的细节。现在让我们来了解一下它们吧!
tidyr包
tidyr
包专注于数据的整理和重塑,它提供了一系列方便的函数,帮助用户将数据整理成更适合分析和建模的格式。tidyr
的核心功能是数据的长宽格式转换,以及数据的拆分和合并。
tidyr包的主要功能
长宽格式转换: gather()
:将宽格式数据转换为长格式数据。宽格式数据通常指每个观测对象的不同变量占据不同的列,而长格式数据则指每个观测对象的不同变量占据不同的行。gather()函数通过指定key和value两个新列,将原始数据框中的所有列转换为长格式。spread()
:与gather()相反,将长格式数据转换回宽格式数据。通过指定key和value列,spread()函数将长格式数据中的重复行合并成宽格式的一行。数据拆分和合并:separate()
:将一个列中的值拆分为多个列。这通常用于处理那些包含多个信息字段(如日期、时间、地址等)的单一列。unite()
:将多个列合并为一个列。与separate()相反,该函数通过将多个列的值连接起来生成一个新的列。缺失值处理:tidyr还提供了处理缺失值的函数,如 drop_na()
用于删除包含缺失值的行,fill()
用于填充缺失值等。
tidyr包的使用场景
tidyr
包非常适合用于数据预处理阶段,特别是在需要将数据从一种格式转换为另一种格式,或者需要对数据进行拆分和合并以便进一步分析时。
dplyr包
dplyr包是R语言中用于数据操作的强大工具,它提供了一套简洁而强大的函数集,方便用户对数据进行筛选、排序、汇总等操作。
dplyr包的主要功能
数据筛选:
filter()
:根据给定的逻辑条件筛选数据框中的行。数据排序:
arrange()
:根据给定的列名或表达式对行进行排序。数据选择:
select()
:选择数据框中的特定列。数据变形:
mutate()
:添加新列或对现有列进行变换。数据汇总:
summarise()
:对数据框中的行进行汇总操作,生成新的统计量。常与group_by()
函数结合使用,以实现对分组数据的汇总。数据连接:
inner_join()
、left_join()
、right_join()
等:根据两个数据框的公共列将它们连接起来。
dplyr包的使用场景
dplyr
包适用于数据分析的各个阶段,特别是在需要对数据进行复杂操作(如筛选、排序、分组汇总等)时。其简洁的语法和高效的处理速度使得dplyr成为R语言用户进行数据操作的首选工具之一。
总的来说,tidyr
和dplyr
是R语言中两个不可或缺的数据处理包。它们提供了丰富的函数集和灵活的数据操作方式,使得用户能够轻松地进行数据清洗、整理和分析工作。
本文作者:杨硕龄
现在:
长按扫码关注:科研生信充电宝
10元赞赏本文,即喜欢作者~
即可直接解锁:
《跟着高分SCI学画图:R语言绘制三线表》对应资源哦~
看到这里你还不心动吗?
赶紧关注、转发、点赞、分享,领取你的专属福利吧~
好啦,以上就是今天推文的全部内容啦!
版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。
如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。