首页 > 科研绘图 > 大佬们的柱形图还能怎么玩?看看这块华夫饼!
2022
12-25

大佬们的柱形图还能怎么玩?看看这块华夫饼!

关于柱形图的实用性和重要性这里就不再过多赘述,通过Excel、Origin、GraphPad Prism等常见科研绘图软件都能够比较轻松获得所需样式的柱形图。

但是,在当下内卷的科研环境中,普通的柱形图和条形图显然不够看,那么如何让自己的柱形图更加出彩呢?

之前为大家分享过当前一些高分期刊中常用到的变种柱形图表的绘制方法,详细可见推文:

《给你的柱形图“烫个头”,跟上科研大佬们的时尚步伐!》

《“棒棒糖”柱形图,给你打开新世界的大门》

《如何轻松get Nature同款棒棒糖图和滑珠散点图?》

今天又来给大家分享一款可以让你脱颖而出的的柱形图表绘制方法!如下图,由一些小格子组合而成,因此从外观上来看,可以称之为“华夫饼柱形图”,或者叫“俄罗斯方块柱形图”,有兴趣赶紧学习起来!

#包的安装和相关包载入

devtools:: install_git( " https://git.rud.is/hrbrmstr/waffle.git ")

library(ggplot2)

library(waffle)

首先,我们用一组基因表达量数据绘制普通柱形图(如何使用Prism绘制各类柱形图可见点击文首推文链接):

(GraphPad Prism9绘制)

接着用同一组数据绘制华夫饼柱形图:

#载入本地数据

df0<- read.table( "waffle0.txt",header = T)

head(df0)

#建立映射

p<- ggplot(df0, aes(fill=gene, values=expression))

#绘制华夫饼条形图

p1<- p + geom_waffle(color = "white", size=1.5, n_rows = 6)

p1

#n_rows:控制华夫饼条形图的行数(根据数据量和实际图表效果进行调整)

但是此时在图中缺少一个gene9对应的格子,因为默认按照原始数据转化为格子绘图时,gene9的数据值过小,达不到一个格子的程度,这种数据需要我们将原始数据转换为百分比。

#绘制百分比华夫饼条形图

p2<- p + geom_waffle(color = "white", size=1.5, n_rows = 6,

make_proportional= T)

p2

#make_proportional:默认值为FALSE(按照原始值);若为TRUE则为从原始值计算比例(将每个值 n 将替换为 n/sum(n));

这样我们就能看到gene9的格子了(数据值再小都至少拥有一个格子)。

#图表调整:

p3<- p2 +

scale_y_discrete+

scale_x_continuous(labels = function(x) x * 6,#使格子数变成实际百分比堆叠值

expand= c(0,0))+

ggthemes::scale_fill_tableau(name=NULL) + #修改配色

coord_equal(ratio=1)#等坐标轴转换(方格子)

p3

#添加标签

p4<- p3 +

labs(title = "Waffle Bar Chart",

x= "Expression")

p4

#自定义主题添加

mytheme<- theme(panel.background = element_rect(fill = NA),

axis.line = element_blank,

axis.text.x = element_text(size = 12),

axis.title.x = element_text(size = 14),

legend.text = element_text(size = 10),

title= element_text(size = 15))

p5<- p4 + mytheme

p5

我们可以看到,华夫饼条形图其实是绘制堆叠型的柱子,也就是画堆叠柱形图。我们再尝试用另一组多样本的微生物丰度数据来测试:

正常的百分比堆叠柱形图画出来如下图(如何使用OS在线工具绘制堆叠柱形图详见推文 《轻松get炫酷河流图的9大画法!》 ):

(OmicShare河流图工具绘制)

我们可以看到在图表中是比较难显示极小值的丰度数据。

下面用相同数据来绘制百分比的分组堆叠华夫饼柱形图:

#载入本地数据

df<- read.table( "waffle.txt",header = T)

head(df)

##指定绘图顺序:

df$phylum <- factor(df$phylum,levels = unique(df$phylum))

#建立映射及绘图:

p<- ggplot(df, aes(fill = phylum, values = OTU)) +

geom_waffle(make_proportional = T,

color= "white", size =1,

n_rows= 8,

flip= TRUE)

p

#flip:默认FALSE,为TRUE时则为将坐标轴翻转(从条形图→柱形图)

#分面

p1<- p +

facet_wrap(~sample, nrow = 1, strip.position = "bottom")

p1

#图表调整及标签添加:

p2<- p1 +

scale_x_discrete+

scale_y_continuous(labels = function(x) x * 8,

expand= c(0,0)) +

ggthemes::scale_fill_tableau(name=NULL) +

coord_equal(ratio=1.6) +

labs(title = "Waffle Bar Chart",

x= "Sample")

p2

#自定义主题添加:

mytheme2<- theme(panel.background = element_rect(fill = NA),

axis.line = element_blank,

axis.text.y = element_text(size = 12),

legend.text = element_text(size = 9),

title= element_text(size = 13))

p3<- p2 + mytheme2

p3

现在百分比堆叠华夫饼柱形图就绘制完成啦!我们综合上述两个华夫饼类图表绘制所用到的代码,发现可以通过分面的方式绘制不堆叠的普通版的华夫饼柱形图:

#普通华夫饼图绘制:

p<- ggplot(df0, aes(fill=gene, values=expression)) +

geom_waffle(color = "white", size=1.5, n_rows = 6,

make_proportional= F,

flip= TRUE)+

facet_wrap(~gene, nrow = 1, strip.position = "bottom") +

scale_x_discrete+

scale_y_continuous(labels = function(x) x * 6,

expand= c(0,0)) +

ggthemes::scale_fill_tableau(name=NULL) +

coord_equal(ratio=3) +

labs(title = "Waffle Bar Chart",

x= "Expression") + mytheme2

p

不过由于格子的限制,普通华夫饼图由于分面关系,并不能转换为百分比型,使用原始数据绘图会导致若数据量过小,如gene9,不满一个格子的话无法在图中显示。这种情况如果是发论文,还是乖乖使用其它样式的柱形图哦!

那么回顾上述绘制出的百分比华夫饼堆叠柱形图普通百分比堆叠柱形图二者在数据呈现上的区别:

普通百分比堆叠柱形图:以实际数据为准(若数据中存在差距过大的极小值在图表中会难以观测到,如微生物丰度类数据);

百分比华夫饼堆叠柱形图:通过格子观测到数据变化趋势,极小值数据也至少拥有一个格子能清楚在图中展现。

具体怎么选择大家可以根据实际需求,多学一个总是没错的!今天的分享就到这!



最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情