“ 在这里声明,插图灵感来源于公众号“科研后花园”,这个公众号介绍了很多类插图用R语言复现的方法,感兴趣的读者可以关注一下。我仍会坚定不移地更新用Visio实现各类插图的方法,主要突出它的方便快捷和美观!”
这幅图是一张非常规的组合图,画图软件没有这种图的模板(非常规),这幅图包含了热图+显著性+柱状图(组合图),这类图越来越多地出现在论文中,是因为组合图表达的信息充分,可以在一幅图上了解全面的信息,而不需要从子图a看到子图c,它们之间的位置关系特别紧密,这是分为多张子图实现不了的。
复现方法:
我们先将需要在Visio中画的元素画出来,配色的话我们需要借助Excel。图中共有4行9列正方形格子,在Visio中通过以下方式实现。
调整方格的间距;方格的线条需要是灰色,因为标注的字体已经是黑色了,方格线条是黑色的话整个图的配色就略显沉重。添加完标注信息后,可以了解整个图的布局,找到留白区,稍后加入一些其他的元素平衡布局。
这里有一个需要注意的地方是,上面的文字旋转了45°,这会导致文字的边界拉长,我们框选的边界是实际的图形边界,而不是我们文字的内部边界,所以我们要对这些元素的边界进行调整,具体方式就是将能缩小的文本框边界都缩小一些,然后将斜项的文本组合在一起,这样它们的边界就会变成一个矩形,就不会占用太多的空白空间。
将其他能在Visio中画出的元素都画出来,补充在图上。我在原图的基础上更改了一些地方。一是方格下面的矩形的配色,在黑色占主体的图中,要加入一些明亮的颜色抵消画面的沉重感;二是更改了左上角渐变色条的表现方式,原图是用黑色的刻度线来表示数值的,这个色条是没有线条的,所以加入刻度线会显得突兀,这里将刻度线变成了白色虚线,加了阴影,这样就非常符合渐变色条的风格了;三是更改了渐变色的颜色,原图是从白色到蓝色,白色部分在图中显示不出来,我在这里把白色改为了浅灰色,刻度线0处便能够看出边界。
接下来就是给方格中间的圆配色,这个是根据实际的数据情况来配色的。我这里用Excel的简化数据来表示一下基本的方法。图中一共有17个圆圈需要配色,那我就在Excel随便创建17个0-1的值(有数据时不用这样)。当然这种配色也可以用其他软件实现,只是在Visio中没有取色器,不太方便,所以选择了这种方式。
通过为条形图配色的方式获取颜色,因为条形图可以在Visio中取消组合,所以能直接通过格式刷来改圆圈的配色。也可以将Visio图复制粘贴到AI或者PS中去改颜色。
配色完成后,要检查各元素之间是否对齐,习惯使用对齐工具进行对齐。整齐是一幅图是否美观的关键,其次才是布局。作图时,多利用参考线标记元素的位置。配色时,要分清楚主体和非主体,主体的颜色和布局要在整幅图中显眼,配色不要全部使用亮色,亮色在全部亮色里就不亮了,适当配一些灰色就会让图看起来特别顺眼。
近期有很多人评论说这些图直接用R语言画就行了,都有现成的代码,我为什么要搞的这么麻烦。我的初衷是想利用另外一种简单的方式帮助科研小白画出好看的图,我之所以不讲代码,是因为我看到那些代码都头疼。如果我们用了现成的R语言代码画出了这幅图,对于画图的人来说是没有任何感觉的,他不会学到如何配色,如何布局,如何美化,最重要的都学不到那画图的意义也就没有了,代码丢失的时候,一切都丢了。
这里截取了“科研后花园”公众号提供的R语言代码,大家可以感觉一下哪种画图的方式最好,不喜勿喷!
rm(list=ls())#clear Global Environmentsetwd("D:/桌面/test")
library(ggplot2) # Create Elegant Data Visualisations Using the Grammar of Graphicslibrary(reshape2) # Flexibly Reshape Data: A Reboot of the Reshape Packagedata1 <- read.table("data1.txt",sep="\t",header = T,check.names = F)
data2 <- read.table("data2.txt",sep="\t",header = T,check.names = F)
data1$Y <- c(1,2,3,4)
data2$Y <- c(1,2,3,4)
df1 <- melt(data1,id.vars = c("group","Y"))
df1$X <- rep(1:9, each = 4)
df1$gap <- rep(c(1,2,3),times = c(4,4,28))
p1 <- ggplot(df1, aes(X, Y)) +
geom_rect(aes(xmin = X-0.5, xmax = X+0.5, ymin = Y-0.5, ymax = Y+0.5), color = "grey40",fill="white") +
geom_point(aes(size= ifelse(value > 0, value, 0),color=ifelse(value > 0, value, 0)))+
scale_color_continuous(low = "white", high = "#23589e") +
geom_point(data = df1[df1$value == 0, ], shape = 21, size = 1, color = "black",fill="grey50")+
geom_text(data = subset(df1, value > 0 & value < 0.5),
aes(label = "NS"), size=4,color="#92461f",vjust=-0.1)+
scale_x_continuous(position = "top",breaks = c(1:9), labels = c("Overall transm.", "CosteaPl_2017_DEU", "BritolL_2016", "Guinea-Bissau", "PasolliE_2018_MDG","PehrssonE_2016_PER", "PehrssonE_2016_SLV","Ghana","Tanzania")) +
scale_y_continuous(breaks = c(1:4), labels = data1$group)+
theme_void()+
theme(axis.text.x = element_text(angle = 45,hjust = 0,vjust = 0,size=10,color="black"),
axis.text.y = element_text(color="black",size=10,vjust = 0,hjust = 1))+
labs(x=NULL,y=NULL,color="SGB transmissibility")+
guides(size = "none")+
scale_size_continuous(range = c(1,8))+
facet_grid(~gap,scales = 'free',space = "free")+
theme(strip.text = element_blank())+
geom_rect(data = df1[df1$gap == 2, ], aes(xmin = 1.5, xmax = 2.5, ymin = -Inf, ymax = 0.3),
fill = "#6c3417")+
geom_rect(data = df1[df1$gap == 3, ], aes(xmin = 2.5, xmax = 9.5, ymin = -Inf, ymax = 0.3),
fill = "#68a030")#绘制柱状图p2 <- ggplot(data2,aes(Y,value))+
geom_col(fill="#b2b2b2",width = 0.8)+
theme_classic()+
theme(axis.text.x = element_text(color = "black",size=12),
axis.ticks.x = element_line(color = "black",linewidth=0.8),
axis.line.x = element_line(color = "black",linewidth=0.8),
axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
axis.line.y = element_blank(),
plot.title = element_text(color="black",hjust = 0.5,size=15),
plot.background = element_blank())+
coord_flip()+
labs(x=NULL,y=NULL,title = "Prevalence(%)")+
scale_y_continuous(expand = c(0,0))###拼接图形p1%>%aplot::insert_right(p2,width = 0.2)
关注“博硕科研绘图”公众号,了解更多科研绘图知识!