R语言 | 双向分组条形图和自制图例

之前在复现一篇2021年5月4日发表于Glob Heart(影响因子:3.423)的GBD文章Global Burden of Aortic Aneurysm and Attributable Risk Factors from 1990 to 2017时遇到了一张十分有意思的图,想了很久都没有复现出来,最近看了Y叔的一篇推文后有了灵感,就迫不及待地想与大家分享啦。话不多说,让我们开始吧!

文献中的原图

从图中可以看出,这张图主要涉及到分组条形图,双向条形图,分面等操作。

 数据下载

数据通过GBD数据库(http://ghdx.healthdata.org/gbd-results-tool)下载。数据库界面如下图所示:

根据文中提示下载得到以下数据。

图A数据

图B数据

数据加载和处理

#载入包

library(ggplot2)

#载入数据

get1 <- read.csv('A.csv')

get2 <- read.csv('B.csv')

get1[which(get1$sex=='Female'),c('val')] <- get1[which(get1$sex=='Female'),c('val')]*-1

get1$location <- factor(get1$location,levels =c("Western Sub-Saharan Africa","Western Europe",

"Tropical Latin America","Southern Sub-Saharan Africa",

"Southern Latin America","Southeast Asia","Oceania",

"North Africa and Middle East","High-income North America",

"South Asia","High-income Asia Pacific","Eastern Sub-Saharan Africa",

"Eastern Europe","East Asia","Central Sub-Saharan Africa",

"Central Latin America","Central Asia","Central Europe","Caribbean",

"Australasia","Andean Latin America","Global"))

get1$year <- as.factor(get1$year)

#这两句代码很重要,大家都知道,在ggplot2中画图时需要指定data的,没有这个我们可不能自制图例

df1<-data.frame(rei=c('High systolic blood pressure'),label=c("1990-Male","1990-Female"))

df2<-data.frame(rei=c('High systolic blood pressure'),label=c("2019-Male","2019-Female"))

这里的数据处理很细节哦~要将女性的数据转成负值,还要将location进行因子排序排序,不然就不是我们想要的顺序了。另外,还要将year因子化,不然就是连续性变量啦。

ggplot2画图

aaa <- ggplot(get1)+

geom_bar(aes(x=location,y=val,group=year,

fill=sex,alpha=year),stat = 'identity',

width = 0.5,position = position_dodge(width = 0.5))+

scale_alpha_discrete(range = c(1,0.5))+#设置前一个透明度为1,后一个为0.5

labs( y = 'Percent(%)') +

coord_flip()+#翻转坐标轴

scale_fill_manual(values = c("#CC0000","#006633"))+

#修改坐标轴刻度和标签

scale_y_continuous(breaks = seq(-0.8, 0.8, 0.2), labels = as.character(abs(seq(-80, 80, 20))), limits = c(-0.8, 0.8)) +

#现在的版本需要这样设置移除图例啦

guides(fill="none",alpha="none")+

facet_wrap(~rei)+

#自制图例

geom_point(data = df1,x=c(22,21),y=c(-0.8),shape=15,color=c("#CC0000","#006633"),alpha=0.5,size=5)+

geom_point(data = df1,x=c(20,19),y=c(-0.8),shape=15,color=c("#CC0000","#006633"),alpha=1,size=5)+

geom_text(data = df1,x=c(21,22),y=c(-0.6,-0.58),aes(label=label))+

geom_text(data = df2,x=c(19,20),y=c(-0.6,-0.58),aes(label=label))+

theme_bw()

aaa

这段代码最出色的地方莫过于通过画点图和加文本注释来自制图例了,在这里再次感谢Y叔给予的灵感哈哈。

细心的小伙伴或许能发现,这里的xy轴坐标还是翻转前的坐标,并且有没有发现,图中y轴是没有坐标的,原来一个小格就是一个坐标。我在这两个坑里面待了很久呢!

会画A图,B图不就信手拈来吗!最后用patchwork包一拼接,是不是跟原图差不多了。当然,把图画坐标轴外面的操作原谅我真的不行,R语言学习之路还很漫长!

末尾

最后,再给大家讲一下我踩过的坑吧,感受一遍才不会再次去踩。

美学长度不相同,因为示例数据有四个,但我们只指定了两个,结果就导致R语言不知道为哪两个填充颜色。另外,在分面图里要注意,要先指定一个面才能单独在这个面里添加注释。

好了,今天的分享就到这里,是不是感觉收获满满呢?

[参考资料]

[1]    《R语言数据可视化实战》

[2]    ggplot2包(Version3.3.5)

[3]    patchwork包(Version1.1.1)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容