前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nature图表复现|双轴柱状与折线图

Nature图表复现|双轴柱状与折线图

作者头像
R语言数据分析指南
发布2023-09-20 08:34:01
2250
发布2023-09-20 08:34:01
举报

论文

论文原图

图形解读

❝此图的绘制不算难,难点在于各部分线条、字体、颜色、间距以及添加辅助刻度条,当然这些设置都可以在theme里面轻松完成,只是过程颇为繁琐。 ❞

加载R包

代码语言:javascript
复制
library(tidyverse)

导入数据

代码语言:javascript
复制
gdp <- read_tsv("data.tsv")

数据清洗

代码语言:javascript
复制
df <- gdp %>% filter(continent=="Africa") %>% 
  select(1,3,4,6) %>% mutate(year=as.character(year))

数据可视化

代码语言:javascript
复制
ggplot() +
  # 使用stat_summary()添加预期寿命(lifeExp)的平均值柱状图
  stat_summary(data=df, aes(year, lifeExp), fun = "mean", geom = "bar", alpha = 0.7, fill="#00A08A") +
  # 添加预期寿命(lifeExp)的误差条
  stat_summary(data=df, aes(year, lifeExp), fun.data = "mean_cl_normal", geom = "errorbar", width = .2, color="#00A08A") +
  # 添加人均GDP(gdpPercap)的误差条
  stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap), fun = mean, geom = "errorbar", width=.2, color="#F98400",
               fun.max = function(x) mean(x) + sd(x) / sqrt(length(x)),
               fun.min = function(x) mean(x) - sd(x) / sqrt(length(x))) +
  # 添加人均GDP(gdpPercap)的平均值点
  stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap), fun = "mean", geom = "point", size=3, color="#F98400") +
  # 添加人均GDP(gdpPercap)的平均值线
  stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap, group=1), fun = "mean", geom = "line", color="#F98400") +
  # 设置y轴的比例和标签
  scale_y_continuous(expand = c(0, 1), breaks = scales::pretty_breaks(n = 12),
                     sec.axis = sec_axis(~. * 20, breaks = scales::pretty_breaks(n = 12),
                                         name = "gdpPercap")) +
  # 应用主题
  theme_test() +
  # 自定义主题设置
  theme(panel.background = element_blank(),
        axis.ticks.length.x.bottom = unit(-0.05, "in"),
        axis.ticks.length.y.left = unit(-0.05, "in"),
        axis.ticks.length.y.right = unit(-0.05, "in"),
        axis.line.y.left = element_line(color="#00A08A"),
        axis.line.y.right = element_line(color="#F98400"),
        axis.line.x.bottom = element_line(color="black"),
        axis.line.x.top = element_line(color="grey80"),
        axis.text.y.right = element_text(color="#F98400", margin = margin(l = 5, r = 10)),
        axis.text.y.left = element_text(color="#00A08A", margin = margin(l = 10, r = 5)),
        axis.title.y.left = element_text(color="#00A08A", face="bold"),
        axis.title.y.right = element_text(color="#F98400", face="bold"),
        axis.title.x.bottom = element_blank())
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-17 21:50,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文
  • 论文原图
  • 图形解读
  • 加载R包
  • 导入数据
  • 数据清洗
  • 数据可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档