跟着Nature正刊学作图 | 双轴柱状+折线散点图!

这篇具有很好参考价值的文章主要介绍了跟着Nature正刊学作图 | 双轴柱状+折线散点图!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


   跟着「Nature」正刊学作图,今天复现Nature文章中的一张双轴图–左边为分组柱状图、右边为折线散点图。

复现图片

跟着Nature正刊学作图 | 双轴柱状+折线散点图!,【R绘图】,r语言,ggplot2,可视化
图中的a是我们今天准备复刻的,该图由柱状图和散点图组合的双轴图。

设置工作路径和加载相关R包

rm(list = ls()) # 清空当前环境变量
setwd("C:/Users/Zz/Desktop/公众号 SES") # 设置工作路径
# 加载R包
library(ggplot2)
library(tidyverse)

读取数据集

cData <- read_csv("cData.csv")
head(cData)
# Weeks Type               lfValue rgValue
# <dbl> <chr>                <dbl>   <dbl>
# 1    20 By week of testing    2500    1.3 
# 2    20 By week of testing    2550    1.5 
# 3    20 By week of testing    2450    1.45
# 4    21 By week of testing    2750    1.2 
# 5    21 By week of testing    2780    1.25
# 6    21 By week of testing    2680    1.18

数据可视化

# 物种组成堆叠面积图
library(ggplot2)
library(ggalluvial)
ggplot(data = top10,
       aes(x = Depth, y = Abundance, fill = reorder(Phylum, -Abundance),
           colour = reorder(Phylum, -Abundance),
           stratum = reorder(Phylum, -Abundance) ,
           alluvium = reorder(Phylum, -Abundance))) +
  geom_alluvium(aes(fill = reorder(Phylum, -Abundance)), 
                alpha = 0.7, decreasing = FALSE) +
  geom_stratum(aes(fill = reorder(Phylum, Abundance)), 
                   width = 0.3, size = 0.1, color = "black") +
  scale_y_continuous(expand = c(0, 0)) +
  theme_bw() +
  facet_grid(. ~ Treat, scales = "fixed") +
  scale_fill_manual(values = c("#EB7369", "#CF8B0B", "#9D9F20", "#2BB077", "#2BB077",
                                "#1BB3B7", "#29A4DE", "#8989C1", "#B174AD",
                                "#DE66A1"), name =  "Phylum") +
  scale_color_manual(values = c("#EB7369", "#CF8B0B", "#9D9F20", "#2BB077", "#2BB077",
                                "#1BB3B7", "#29A4DE", "#8989C1", "#B174AD",
                                "#DE66A1")) +
  guides(color = "none")+
  theme(
    panel.grid=element_blank(),
    panel.spacing.x = unit(0, units = "cm"),
    strip.background = element_rect(
      color = "white", fill = "white", 
      linetype = "solid", size = 1),
    strip.placement = "outside",
    axis.line.y.left = element_line(color = "black", size = 0.7),
    axis.line.x.bottom = element_line(color = "black", size = 0.7),
    strip.text.x = element_text(size = 14, face = "bold"),
    axis.text = element_text(face = "bold", 
                             size = 12, color = "black"),
    axis.title = element_text(face = "bold", 
                              size = 14, colour = "black"),
    legend.title = element_text(face = "bold", 
                                size = 12, color = "black"),
    legend.text = element_text(face = "bold", size = 12, color = "black"),
    axis.ticks.x = element_line(size = 1),
    axis.ticks.y = element_line(size = 1),
  )+
  labs(x = "Depth",y= "Relative Abundance of Phylum (%)")

数据包括以下指标:2个(左边和右边)数值变量、2个分类变量。

在可视化前,我们需要先思考图中构成的元素,由哪些组成。

  • 计算每个分组或处理下的均值和标准差;

计算均值和标准差

cData_summary <- cData %>%
  group_by(Weeks, Type) %>%
  summarise(
    avg_lfValue = mean(lfValue),
    sd_lfValue = sd(lfValue),
    avg_rgValue = mean(rgValue),
    sd_rgValue = sd(rgValue),
  )
cData_summary
# Weeks Type               avg_lfValue sd_lfValue avg_rgValue sd_rgValue
# <dbl> <chr>                    <dbl>      <dbl>       <dbl>      <dbl>
# 1    20 By week of onset         2623.       25.2        1.98     0.0764
# 2    20 By week of testing       2500        50          1.42     0.104 
# 3    21 By week of onset         3543.       40.4        1.74     0.0361
# 4    21 By week of testing       2737.       51.3        1.21     0.0361
# 5    22 By week of onset         2770        26.5        1.28     0.0300
# 6    22 By week of testing       2160        60          1.10     0.0839
# 7    23 By week of onset         2143.       40.4        1.31     0.0208
# 8    23 By week of testing       1777.       75.1        1.02     0.0153
# 9    24 By week of onset         1823.       25.2        1.15     0.0300
# 10    24 By week of testing       1667.       61.1        1.07     0.0265
# 11    25 By week of onset         1690        36.1        1.23     0.0208
# 12    25 By week of testing       1610        36.1        1.2      0.0300
# 13    26 By week of onset         1607.       30.6        1.18     0.0252
# 14    26 By week of testing       1673.       30.6        1.16     0.0361

可视化过程

ggplot()+
  geom_bar(
    data = cData_summary %>% 
             mutate(Type = factor(Type, levels = c("By week of testing","By week of onset"))),
           aes(x = Weeks, y = avg_lfValue, fill = Type), 
           alpha = 0.5, stat = "identity", position = position_dodge(0.75), width = 0.75
    ) +
  geom_errorbar(
    data = cData_summary %>% 
      mutate(Type = factor(Type, levels = c("By week of testing","By week of onset"))),
    aes(x = Weeks, y = avg_lfValue, 
        ymin = avg_lfValue - sd_lfValue, ymax = avg_lfValue + sd_lfValue,
        group = Type), color = "black",
    position = position_dodge(0.75), width = 0.2
  ) +
  geom_line(
    data = cData_summary %>% 
      mutate(Type = factor(Type, levels = c("By week of testing","By week of onset"))),
    aes(x = Weeks, avg_rgValue*1950, group = Type, color = Type),
    position = position_dodge(0.75), linewidth = 0.8
    ) +
  geom_point(
    data = cData_summary %>% 
      mutate(Type = factor(Type, levels = c("By week of testing","By week of onset"))),
    aes(x = Weeks, y = avg_rgValue*1950, color = Type), 
    position = position_dodge(0.75), size = 2.5
  ) + 
  scale_x_continuous(
    breaks = seq(20, 26, 1)
    ) +
  scale_y_continuous(name = c("Number of laboratory-confirmed\n sympotomatic cases"),
                     sec.axis = sec_axis(~ ./1950, 
                                         name = c("Test positivity rate (%)"),
                                         breaks = seq(0, 2, 1)),
                     limits = c(0, 4000),
                     breaks = seq(0, 4000, 500),
                     expand = c(0, 0)) +
  scale_color_manual(
    values = c("#FE8F3C", "#1E899A")
                     ) +
  scale_fill_manual(
    values = c("#FE8F3C", "#1E899A")
  ) +
  theme_bw() +
  theme(
    legend.position = c(0.9, 0.9),
    legend.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    axis.text.x.bottom = element_text(color = "black", size = 12),
    axis.text.y.left = element_text(color = "black", size = 12),
    axis.text.y.right = element_text(color = "#44909A", size = 12),
    axis.title.y.right = element_text(color = "#44909A", size = 12, angle = 90),
    axis.line.y.right = element_line(color = "#44909A"),
    axis.ticks.y.right = element_line(color = "#44909A"),
    axis.title = element_text(color = "black", size = 12)
    ) +
  labs(
    x = "Week",
    color = "",
    fill = ""
    )

跟着Nature正刊学作图 | 双轴柱状+折线散点图!,【R绘图】,r语言,ggplot2,可视化

复现效果比较完美,细节可以参考文中代码,有疑惑可以留言讨论~文章来源地址https://www.toymoban.com/news/detail-735011.html

到了这里,关于跟着Nature正刊学作图 | 双轴柱状+折线散点图!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2.x-echarts公共组件封装--简易篇(3d柱状图,炫酷仪表盘,折线,曲线图)

    更新一下之前写的echarts简单图表公共组件的封装,该组件可以实现自适应展示效果 废话不多说,上代码: vue-echarts通用组件 下面的一个混入文件是用来实现,窗口改变echarts自适应的js文件: 接下来是debounce.js 下面直接上代码:父组件调用+展示效果 截图: 下面是一个仪表盘

    2023年04月13日
    浏览(72)
  • 双轴XY摇杆按键模块(stm32)

    今天,翻出来一个双轴摇杆模块,某宝上几块钱一个,就给大家分享一下这个模块的驱动程序吧。   双轴驱动模块:可随着上面的键帽转动 获得模拟值 通过adc转换就可以查看到具体的数据 从而得到上下左右的值。 引脚: MS:按键 VRy:y轴模拟量输出 VRx:x轴模拟量输出 5v G

    2024年02月14日
    浏览(41)
  • 【STM32外设系列】双轴按键PS2摇杆

    🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流!   我们首先来看一下双轴按键PS2摇杆长什么样子   该模块有两种输出,X轴和Y轴以模拟信号(电压)的形式输出,Z轴以数字信号(高低电平)的形式输出。其中各个引脚的作用如下 G

    2024年02月22日
    浏览(42)
  • 一款双轴高精度数字型(RS485)倾角传感器

    一款双轴高精度数字型(RS485)倾角传感器,其产品分辨率为0.0001°,采用铝合金外壳,防护等级为IP67,可用来系统与准确地测量水平角度的变化状况。 ★ 抗外界电磁干扰能力强、能承受大冲击震动,是工业级别的传感设备; ★ 具有显著的负载能力和非常好的冲击耐久性,

    2024年02月08日
    浏览(39)
  • 基于STM32的双轴XY摇杆传感器模块使用

    本文主要介绍的是如何通过STM32核心板 控制 双轴XY摇杆传感器模块 以及将传感信息打印到串口调试助手 提示:以下是本篇文章正文内容,下面案例可供参考 外形如图所示,共五个引脚 分别是VCC GND X轴传感模拟量输出 以及 Y轴传感模拟量输出 以及一个SW按键数字量输出 摇杆

    2024年02月03日
    浏览(44)
  • 51单片机双轴太阳能追光追日系统ULN2003步进电机

    功能介绍:    

    2023年04月09日
    浏览(54)
  • Nature:刘清华团队揭示调控睡眠时间的关键分子通路

    导读 你能做到一周不睡觉吗?良好的睡眠对我们保证生活质量十分重要。不过,有些人每天只需睡4-6个小时,有些人则需要8个小时(可能还不够),这是什么原因导致的? 其实,这也是很多科学家好奇的问题,最近,研究人员在小鼠身上发现了调控睡眠时间的通路机制,揭

    2024年02月03日
    浏览(39)
  • 折线分割平面

    我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。 Input 输入数据的第一行是一个整数C,表示测试实例的个数,然后是

    2024年02月13日
    浏览(32)
  • ssm实现折线统计图

    ​ 方法1:单张数据表中的数据图表生成 图表统计,查看部门人数统计这里实现的时单张表中的数据实现部门人数折线统计图展示。 这里是后端方法,这里只有mybatis和controller层的代码其他代码可自行生成。 方法二:多张图表生成部门人数统计图,在图表中显示部门总人数,

    2024年02月09日
    浏览(28)
  • QChart——折线

    Qchart的图形显示依附于QChartView,创建一个QChartView继承类,通过窗口部件的提升进行图表的显示 添加了触摸屏的双指捏合的缩放(测试用,参数采用的固定值,没有做太多的处理) 一、简单认识QLineSeries QLineSeries属于折线类,它继承于QXYSeries类,可以使用QXYSeries类所有方法,

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包