如何将论文图表做得漂亮?

最近看英文文献,无论是严谨性还是语言的表达,都大大超过了国内的文献。更让人惊讶的是:外文文献的图表做得非常漂亮,这让有完美主义的我非常羡慕。请问各位牛…
关注者
1,078
被浏览
1,227,373

59 个回答

1.彩色标签条形图



条形图,展示分析结果直观明了,绘制方法非常简单,在科研数据的展示中占有非常重要的地位,差不多每篇学术论文都可以看到它。可是,条形图看似简单,但有些条形图的绘制还是有一点难度的,比如下图这样的。


我们可发现上图最大特点(也是绘制难点)是“两级”刻度标签的添加,并且使坐标轴(Y轴)刻度标签的颜色是与“条形”的颜色是完全一致的,这里其实涉及到数字“0”和空值的妙用。关于这类图表的绘制,比如气泡图,箱型图,小提琴图等,其实利用ggplot2包的一个小小的“Bug”就可以完美实现。

#读入数据;
dt1<-read.table("koenrich.xls",sep = "\t",header = T)
#指定纵轴标签顺序,按照输入文件的顺序排序,否则默认按照首字母顺序,同时逆序绘制,保持与表格顺序一致;
dt1$KEGG_A_Class<-factor(dt1$KEGG_A_Class,
                         levels = rev(unique(dt1$KEGG_A_Class)),
                         ordered = TRUE)
dt1$KEGG_B_Class<-factor(dt1$KEGG_B_Class,
                         levels = rev(unique(dt1$KEGG_B_Class)),
                         ordered = TRUE)
# 加载ggplot2包;
library(ggplot2)
#建立数据(Genes.Number, KEGG_B_Class)与图形(点)的映射关系;
p1<-ggplot(dt1, aes(x=Genes_Number,
                    y=KEGG_B_Class,
                    fill=KEGG_A_Class,na.rm = FALSE))+
  geom_bar(stat="identity",na.rm = FALSE)+
 geom_text(aes(x=Genes_Number,y=KEGG_B_Class,label=label),size=2.5,hjust="left",nudge_x=0.1)+
  scale_x_continuous(limits = c(0, 25),expand=expansion(mult = c(0, .1)))+
  labs(x="Number of Gene",y="",title="KEGG pathway anotation")
p1

#获取颜色;
g <- ggplot_build(p1)
mycol<-g$data[[1]]["fill"]
col<-rev(mycol[,1])
#将A Class对应的颜色设为深黑色;
num <- rev(dt1$Genes_Number)
index <- which(num==0)
col[index] <- "grey10"



#自定义图表主题,对图表做精细调整;
top.mar=0.2
right.mar=0.2
bottom.mar=0.2
left.mar=0.2
mytheme1<-theme(plot.title = element_text(size = rel(1),hjust = 0.5,face = "bold"),
                          axis.title = element_text(size = rel(1)),
                          axis.text.y = element_text(size=rel(0.85),
                                                     colour =col,face = "bold"),
                          legend.position = "none",
                          plot.margin=unit(x=c(top.mar,right.mar,
                                               bottom.mar,left.mar),
                                           units="inches"))
#查看绘图效果;
p1+mytheme1


详细教程链接:《如何绘制好看的条形图?标签颜色相对应的这种。。。》



2.发散PCA散点图



PCA (Principal Component Analysis) 散点图,是科研文章中常见的一类散点图。下面就以PCA散点图为例,为大家介绍如何使用ggplot2绘制好看的散点图。

#读入数据;
dt <- read.csv("PCA_data.csv")
#载入ggplot2绘图包;
library(ggplot2)
library(ggh4x)

#绘制实心散点图;
p1 <- ggplot(dt,aes(x=PC1,y=PC2,fill=Diagnosis))+
  stat_centroid(aes(xend = PC1, yend = PC2, colour = Diagnosis),
                geom = "segment", crop_other = F,
                alpha=0.3,size = 1,show.legend = F)+
  geom_point(size=3,alpha=0.7,
             color="white",shape = 21,show.legend = T)+
  scale_color_manual(name="",
                     values = c("#FF9999","#c77cff"))+
  scale_fill_manual(name="",
                     values = c("#FF9999","#c77cff"))+
  scale_x_continuous(expand=expansion(add = c(0.7,0.7)),
                     limits=c(-10,5))+
  scale_y_continuous(expand=expansion(add = c(0.5,0.5)),
                     limits=c(-7.5,5))+
  guides(x = "axis_truncated",y = "axis_truncated")

p1


详细教程链接:《不就是PCA图么,还能有什么新花样?》



3.漂亮的玫瑰图



条形图(或柱状图)是科研文章中比较常见的数据展示方式。除了墨守常规的样式,其实你也可以试试南丁格尔玫瑰图,特别是当你的数据具有周期性的时候,比如四季变化、昼夜节律等,非常适合。

#读入数据;
dt <- read.csv("test_data.csv")
#实用month.abb[]将月份转换为英文缩写;
dt$Month <- month.abb[dt$Month]
#载入相关的R包;
library(dplyr)
library(ggplot2)
#转成tibble格式;
df <- as_tibble(dt)
#将月份转换成因子,固定顺序;
df$Month <- factor(df$Month,levels = unique(df$Month),ordered = T)
#将季度数值转成字符;
df$Quarter <- as.character(df$Quarter)

#提取作图数据;
df1 <- filter(df,Group=="Day")
#自定义颜色;
subcol<-rainbow(12)
mycol1<-colorRampPalette(subcol[1:4])(12)
mycol2<-colorRampPalette(c("#A5CC26","yellow","orange","tomato"))(12)

#绘制相互叠合的玫瑰图;
p1 <- ggplot(df1,aes(x = Month, y=Length,fill=Month))+
  geom_col(width = 1.2,color=NA,alpha=1)+
  geom_text(aes(label = Length),nudge_y=-2,
            colour="white",size=3)+
  ylim(-1.2,17)+
  scale_fill_manual(values = mycol1)+
  coord_polar(start = 0)+
  theme_void()
p1




详细教程链接:《遥遥领先!如何绘制漂亮的玫瑰图?》



4.富集分析圈图



OmicShare的GO、KEGG富集分析工具非常强大,只需上传目的基因文件,即可进行常见物种的GO、KEGG富集分析。分析结果中,直接包含数据可视化结果,比如柱状图、圈图、网络图等。

工具链接:omicshare.com/tools/Hom

详细教程链接:《如何绘制GO、KEGG富集圈图》



5.相关性网络热图



网络热图,应用于多组学关联分析,可展示组学内(热图)和组学间(网络图)的相关性结果。其中,组学内相关性热图,用于展示每两个元素(环境因子、代谢物、性状等)之间相关系数;组学间相关性网络图,可展示16S-OTU、宏基因组-物种、基因等丰度信息与相关性数据文件每个元素之间的相关性。

工具链接:omicshare.com/tools

详细教程链接:《推荐一个绘制Science网络热图的在线工具》



6.漂亮的桑基图



桑基图(SanKey Plot)非常适合展示数据的流动变化,输入关联分析数据或其他数据绘制桑基图,查看数据的流向,或展示数据间的关联。

工具链接:omicshare.com/tools/hom

详细教程链接:《你的论文中还缺一张“NB闪闪”的美图?》




7.多组差异散点图



多组差异散点图,以组间差异倍数的对数值log2FC为纵坐标,以比较组的名称为横坐标,可一次性展示多个比较组的差异基因。一般而言,对于传统的火山图,一张图一次只能展示一个比较组的差异基因,而多组差异散点图可视作多组“火山图”,可一次性展示多个比较组的差异基因。

工具链接:

omicshare.com/tools/hom

详细教程链接:《分享一种“过于先进,不宜展示”的图表绘制方法》



8.自定义标签热图



热图,主要使用渐变颜色来展现数据在不同样本中的变化规律,工具除了支持为热图添加分组注释条,也可以指定展示特定的文字标签,即使绘制上百个基因的热图,基因标签也不会重叠在一起。

工具链接:omicshare.com/tools/Hom


兽先,大家别被它们复杂的外表所迷惑了,想做出这些图表,其实你只需要用到PPT里的一个功能——【合并形状】,又称【布尔运算】。

选中两个或以上的元素时,点击【形状格式】-【合并形状】,你就能找到“ 相交、剪除、结合、组合、拆分”这5个功能:



你可以用它们来对形状做出各种剪来剪去、拼来拼去的骚操作:











这里我就以2013的版本为例,来跟大伙儿说说下面这些图表都是怎么用【合并形状】的功能折腾出来的。

我认为好的图表应该是要满足四点:观点明确、类型简洁、外观专业,细节完美

明确了方向之后,所有的工作都是围绕这几点服务的。

首先,你得明确自己想表达的观点,再考虑通过什么样的方式去实现它,选择适合的图表的类型。

接下来,如何将细节打磨的完美,看起来比较专业呢?我的建议还是多看看国外的期刊,参考它的版式和配色,提高自己的审美品位,经济学人这方面做的也很不错。

图表的好看,颜色搭配占了很大一部分,经济学人以蓝色调为主。


看到好的颜色搭配,不妨用Colorpix软件,将RGB值记录下来。

ColorPix - Download

使用方法参见

有哪些好用的小众软件? - 陈曦的回答

另外,我再推荐个配色网站,提供多种色系搭配,基本满足日常使用。

Color Scheme Designer 3_高级在线配色器

关于细节的打磨。间距的选择,线条的粗细,1.5磅还是0.75磅,平滑线还是折线,微软雅黑还是宋体,这些技术性工作可以多看看各位大神的教程,慢慢积累,找到一套最合适自己的方法。

这里推荐几个不错的资料

Excel2013 商务图表制作高级教程

,这个是免费的。

向《经济学人》学图表

,可惜这是收费的。

刘万祥ExcelPro_新浪博客

,其博客也会经常介绍一些技巧,可以关注下。

如何制作图表非常精美的 Excel 文档? - Microsoft Excel

知乎大神心血之作。

最后,我想说如果是要黑白打印的毕业论文,配色还是建议老老实实用灰色系主调,否则完全不能看啊!不能看啊!!!

图片源自网络及云课程截图,侵删。