创建 Sankey 或冲积图并停止流,其中 R 中“next_node”和“next_x”值为“NA”

问题描述 投票:0回答:1

我正在尝试使用 R 中的 ggplot2 库创建 Sankey 或冲积图,以根据提供的 CSV 数据可视化节点流。数据包括“x”、“node”、“next_x”和“next_node”列。我想创建一个图,其中流量由“node”和“next_node”列确定。此外,我想排除“next_x”为“NA”的任何流。

这是我正在使用的 CSV 数据的简化版本:

x   node    next_x  next_node
Homo_sapiens    SLC35A1 Mus_musculus    SLC35A1
Homo_sapiens    RARS2   Mus_musculus    RARS2
Homo_sapiens    ORC3    Mus_musculus    ORC3
Homo_sapiens    AKIRIN2 Mus_musculus    AKIRIN2
Homo_sapiens    SPACA1  Mus_musculus    SPACA1
Homo_sapiens    CNR1    Mus_musculus    CNR1
Homo_sapiens    RNGTT   Mus_musculus    RNGTT
Homo_sapiens    PNRC1   Mus_musculus    PNRC1
Homo_sapiens    PM20D2  Mus_musculus    PM20D2
Homo_sapiens    SRSF12  Mus_musculus    SRSF12
Homo_sapiens    GABRR1  Mus_musculus    GABRR1
Mus_musculus    GABRR1  Rattus_norvegicus   GABRR1
Mus_musculus    PM20D2  Rattus_norvegicus   PM20D2
Mus_musculus    SRSF12  Rattus_norvegicus   SRSF12
Mus_musculus    PNRC1   Rattus_norvegicus   PNRC1
Mus_musculus    RNGTT   Rattus_norvegicus   RNGTT
Mus_musculus    CNR1    Rattus_norvegicus   CNR1
Mus_musculus    SPACA1  Rattus_norvegicus   SPACA1
Mus_musculus    AKIRIN2 Rattus_norvegicus   AKIRIN2
Mus_musculus    ORC3    Rattus_norvegicus   ORC3
Mus_musculus    RARS2   Rattus_norvegicus   RARS2
Mus_musculus    SLC35A1 Rattus_norvegicus   SLC35A1
Rattus_norvegicus   GABRR1  Canis_lupus_familiaris  GABRR1
Rattus_norvegicus   PM20D2  Canis_lupus_familiaris  PM20D2
Rattus_norvegicus   SRSF12  Canis_lupus_familiaris  SRSF12
Rattus_norvegicus   PNRC1   Canis_lupus_familiaris  PNRC1
Rattus_norvegicus   RNGTT   Canis_lupus_familiaris  RNGTT
Rattus_norvegicus   CNR1    Canis_lupus_familiaris  CNR1
Rattus_norvegicus   SPACA1  Canis_lupus_familiaris  SPACA1
Rattus_norvegicus   AKIRIN2 Canis_lupus_familiaris  AKIRIN2
Rattus_norvegicus   ORC3    Canis_lupus_familiaris  ORC3
Rattus_norvegicus   RARS2   Canis_lupus_familiaris  RARS2
Rattus_norvegicus   SLC35A1 Canis_lupus_familiaris  SLC35A1
Canis_lupus_familiaris  SLC35A1 Monodelphis_domestica   SLC35A1
Canis_lupus_familiaris  RARS2   Monodelphis_domestica   RARS2
Canis_lupus_familiaris  ORC3    Monodelphis_domestica   ORC3
Canis_lupus_familiaris  AKIRIN2 Monodelphis_domestica   AKIRIN2
Canis_lupus_familiaris  SPACA1  Monodelphis_domestica   SPACA1
Canis_lupus_familiaris  CNR1    Monodelphis_domestica   CNR1
Canis_lupus_familiaris  RNGTT   Monodelphis_domestica   RNGTT
Canis_lupus_familiaris  PNRC1   Monodelphis_domestica   PNRC1
Canis_lupus_familiaris  SRSF12  Monodelphis_domestica   SRSF12
Canis_lupus_familiaris  PM20D2  Monodelphis_domestica   PM20D2
Canis_lupus_familiaris  GABRR1  Monodelphis_domestica   GABRR1
Monodelphis_domestica   SLC35A1 Ornithorhynchus_anatinus    SLC35A1
Monodelphis_domestica   RARS2   Ornithorhynchus_anatinus    RARS2
Monodelphis_domestica   ORC3    Ornithorhynchus_anatinus    ORC3
Monodelphis_domestica   AKIRIN2 Ornithorhynchus_anatinus    AKIRIN2
Monodelphis_domestica   SPACA1  Ornithorhynchus_anatinus    SPACA1
Monodelphis_domestica   CNR1    Ornithorhynchus_anatinus    CNR1
Monodelphis_domestica   RNGTT   Ornithorhynchus_anatinus    RNGTT
Monodelphis_domestica   PNRC1   Ornithorhynchus_anatinus    PNRC1
Monodelphis_domestica   SRSF12  NA  NA
Monodelphis_domestica   PM20D2  Ornithorhynchus_anatinus    PM20D2
Monodelphis_domestica   GABRR1  NA  NA
Ornithorhynchus_anatinus    SLC35A1 Gallus_gallus   SLC35A1
Ornithorhynchus_anatinus    RARS2   Gallus_gallus   RARS2
Ornithorhynchus_anatinus    ORC3    Gallus_gallus   ORC3
Ornithorhynchus_anatinus    AKIRIN2 Gallus_gallus   AKIRIN2
Ornithorhynchus_anatinus    SPACA1  Gallus_gallus   SPACA1
Ornithorhynchus_anatinus    CNR1    Gallus_gallus   CNR1
Ornithorhynchus_anatinus    RNGTT   Gallus_gallus   RNGTT
Ornithorhynchus_anatinus    PNRC1   Gallus_gallus   PNRC1
Ornithorhynchus_anatinus    PM20D2  Gallus_gallus   PM20D2
Ornithorhynchus_anatinus    LOC100076186    NA  NA
Ornithorhynchus_anatinus    LOC114805750    NA  NA
Gallus_gallus   PM20D2  Taeniopygia_guttata PM20D2
Gallus_gallus   PNRC1   Taeniopygia_guttata PNRC1
Gallus_gallus   BORCS6  Taeniopygia_guttata BORCS6
Gallus_gallus   RNGTT   Taeniopygia_guttata RNGTT
Gallus_gallus   LOC101749895    NA  NA
Gallus_gallus   CNR1    Taeniopygia_guttata CNR1
Gallus_gallus   SPACA1  NA  NA
Gallus_gallus   AKIRIN2 Taeniopygia_guttata AKIRIN2
Gallus_gallus   ORC3    Taeniopygia_guttata ORC3
Gallus_gallus   RARS2   Taeniopygia_guttata RARS2
Gallus_gallus   SLC35A1 Taeniopygia_guttata SLC35A1
Taeniopygia_guttata CFAP206 NA  NA
Taeniopygia_guttata SLC35A1 Chelonia_mydas  SLC35A1
Taeniopygia_guttata RARS2   Chelonia_mydas  RARS2
Taeniopygia_guttata ORC3    Chelonia_mydas  ORC3
Taeniopygia_guttata AKIRIN2 Chelonia_mydas  AKIRIN2
Taeniopygia_guttata CNR1    Chelonia_mydas  CNR1
Taeniopygia_guttata RNGTT   Chelonia_mydas  RNGTT
Taeniopygia_guttata BORCS6  NA  NA
Taeniopygia_guttata PNRC1   Chelonia_mydas  PNRC1
Taeniopygia_guttata PM20D2  Chelonia_mydas  PM20D2
Taeniopygia_guttata GABRR1  Chelonia_mydas  GABRR1
Chelonia_mydas  SLC35A1 Anolis_carolinensis SLC35A1
Chelonia_mydas  RARS2   Anolis_carolinensis RARS2
Chelonia_mydas  ORC3    Anolis_carolinensis ORC3
Chelonia_mydas  AKIRIN2 Anolis_carolinensis AKIRIN2
Chelonia_mydas  SPACA1  Anolis_carolinensis SPACA1
Chelonia_mydas  CNR1    Anolis_carolinensis CNR1
Chelonia_mydas  RNGTT   Anolis_carolinensis RNGTT
Chelonia_mydas  LOC102938330    NA  NA
Chelonia_mydas  PNRC1   Anolis_carolinensis PNRC1
Chelonia_mydas  PM20D2  Anolis_carolinensis PM20D2
Chelonia_mydas  GABRR1  NA  NA
Anolis_carolinensis PM20D2  NA  NA
Anolis_carolinensis SRSF12  NA  NA
Anolis_carolinensis PNRC1   NA  NA
Anolis_carolinensis RNGTT   NA  NA
Anolis_carolinensis LOC107982676    NA  NA
Anolis_carolinensis CNR1    NA  NA
Anolis_carolinensis SPACA1  NA  NA
Anolis_carolinensis AKIRIN2 NA  NA
Anolis_carolinensis ORC3    NA  NA
Anolis_carolinensis RARS2   NA  NA
Anolis_carolinensis SLC35A1 NA  NA
Xenopus_laevis  GABRR2.S    NA  NA
Xenopus_laevis  GABRR1.S    NA  NA
Xenopus_laevis  PM20D2.S    NA  NA
Xenopus_laevis  LOC108717975    NA  NA
Xenopus_laevis  RNGTT.S NA  NA
Xenopus_laevis  CNR1.S  NA  NA
Xenopus_laevis  AKIRIN2.S   NA  NA
Xenopus_laevis  ORC3.S  NA  NA
Xenopus_laevis  RARS2.S NA  NA
Xenopus_laevis  SLC35A1.S   NA  NA
Xenopus_laevis  LOC108717977    NA  NA
Latimeria_chalumnae DDX24   NA  NA
Latimeria_chalumnae PPP4R4  NA  NA
Latimeria_chalumnae SERPINA10B  NA  NA
Latimeria_chalumnae ARRDC3A NA  NA
Latimeria_chalumnae LOC102360869    NA  NA
Latimeria_chalumnae CNR1    Protopterus_annectens   CNR1
Latimeria_chalumnae SPACA1  NA  NA
Latimeria_chalumnae AKIRIN2 NA  NA
Latimeria_chalumnae ORC3    NA  NA
Latimeria_chalumnae RARS2   NA  NA
Latimeria_chalumnae LOC102362557    NA  NA
Protopterus_annectens   LOC122794922    NA  NA
Protopterus_annectens   LOC122794923    NA  NA
Protopterus_annectens   LOC122794924    NA  NA
Protopterus_annectens   FBXL5   NA  NA
Protopterus_annectens   CC2D2A  NA  NA
Protopterus_annectens   CNR1    Danio_rerio CNR1
Protopterus_annectens   CPEB2   NA  NA
Protopterus_annectens   BOD1L1  NA  NA
Protopterus_annectens   C1QTNF7 NA  NA
Protopterus_annectens   NKX3-2  NA  NA
Protopterus_annectens   RAB28   NA  NA
Danio_rerio MYO6A   NA  NA
Danio_rerio LOC569340   NA  NA
Danio_rerio MEI4    NA  NA
Danio_rerio NT5E    NA  NA
Danio_rerio SNX14   NA  NA
Danio_rerio CNR1    Oreochromis_niloticus   CNR1
Danio_rerio RNGTT   Oreochromis_niloticus   RNGTT
Danio_rerio PNRC1   NA  NA
Danio_rerio GABRR1  NA  NA
Danio_rerio GABRR2B NA  NA
Danio_rerio UBE2J1  NA  NA
Oreochromis_niloticus   SI:DKEY-174M14.3    NA  NA
Oreochromis_niloticus   RDH14B  NA  NA
Oreochromis_niloticus   LOC102078481    NA  NA
Oreochromis_niloticus   RNGTT   Scyliorhinus_canicula   RNGTT
Oreochromis_niloticus   LOC112842425    NA  NA
Oreochromis_niloticus   CNR1    Scyliorhinus_canicula   CNR1
Oreochromis_niloticus   AKIRIN2 Scyliorhinus_canicula   AKIRIN2
Oreochromis_niloticus   RARS2   Scyliorhinus_canicula   RARS2
Oreochromis_niloticus   SLC35A1 Scyliorhinus_canicula   SLC35A1
Oreochromis_niloticus   LOC100692709    NA  NA
Oreochromis_niloticus   LOC102081816    NA  NA
Scyliorhinus_canicula   SLC35A1 Petromyzon_marinus  SLC35A1
Scyliorhinus_canicula   RARS2   Petromyzon_marinus  RARS2
Scyliorhinus_canicula   ORC3    Petromyzon_marinus  ORC3
Scyliorhinus_canicula   AKIRIN2 Petromyzon_marinus  AKIRIN2
Scyliorhinus_canicula   LOC119967921    NA  NA
Scyliorhinus_canicula   CNR1    Petromyzon_marinus  CNR1
Scyliorhinus_canicula   RNGTT   Petromyzon_marinus  RNGTT
Scyliorhinus_canicula   LOC119967175    NA  NA
Scyliorhinus_canicula   PNRC1   NA  NA
Scyliorhinus_canicula   LOC119967178    NA  NA
Scyliorhinus_canicula   LOC119967180    NA  NA
Petromyzon_marinus  LOC116953416    NA  NA
Petromyzon_marinus  LOC116953419    NA  NA
Petromyzon_marinus  CEP162  NA  NA
Petromyzon_marinus  FBXL22  NA  NA
Petromyzon_marinus  RNGTT   NA  NA
Petromyzon_marinus  CNR1    NA  NA
Petromyzon_marinus  AKIRIN2 NA  NA
Petromyzon_marinus  ORC3    NA  NA
Petromyzon_marinus  RARS2   NA  NA
Petromyzon_marinus  SLC35A1 NA  NA
Petromyzon_marinus  RHBDL2  NA  NA

我正在使用 ggplot2 库来创建绘图,并且我尝试了以下脚本:

library(ggplot2)

pl <- ggplot(data, aes(x = x, node = node, next_node = next_node, next_x = next_x, fill = factor(node), label = node)) +
    geom_sankey(flow.alpha = 0.5,
                node.color = "black",
                show.legend = FALSE,
                na.rm = TRUE) +
    geom_sankey_label(size = 3, color = "black", fill="white", hjust = 0.5) +
    theme_bw() +
    theme(legend.position = "none") +
    theme(axis.title = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks = element_blank(),
          panel.grid = element_blank()) +
    scale_fill_viridis_d(option = "inferno") +
    labs(title = "Sankey diagram using ggplot",
         fill = "Nodes")

但是,当我运行此脚本时,我遇到以下警告消息:

Warning messages:
1: There was 1 warning in `dplyr::mutate()`.
ℹ In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
Caused by warning:
! NAs introduced by coercion 
2: There was 1 warning in `dplyr::mutate()`.
ℹ In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
Caused by warning:
! NAs introduced by coercion 
3: There was 1 warning in `dplyr::mutate()`.
ℹ In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
Caused by warning:
! NAs introduced by coercion 

我也得到了一个不完整的情节:

Incomplete Sankey plot without flow

我正在寻求有关如何解决此问题并使用 ggplot2 成功创建所需的桑基或冲积图的指导。具体来说,我想实现以下目标:

  1. 创建一个绘图,其中流程基于“node”和“next_node”。
  2. 排除“next_x”为“NA”的流。
  3. 避免与 dplyr::mutate() 和 NA 相关的警告消息。

任何解决此问题的帮助或见解将不胜感激。预先感谢您!

编辑:

这是我的基因邻居的原始数据集:

species gene    start   stop    orientation
Homo_sapiens    SLC35A1 1   2   1
Homo_sapiens    RARS2   2   3   -1
Homo_sapiens    ORC3    3   4   1
Homo_sapiens    AKIRIN2 4   5   -1
Homo_sapiens    SPACA1  5   6   1
Homo_sapiens    CNR1    6   7   -1
Homo_sapiens    RNGTT   7   8   -1
Homo_sapiens    PNRC1   8   9   1
Homo_sapiens    PM20D2  9   10  1
Homo_sapiens    SRSF12  10  11  -1
Homo_sapiens    GABRR1  11  12  -1
Mus_musculus    GABRR1  1   2   1
Mus_musculus    PM20D2  2   3   -1
Mus_musculus    SRSF12  3   4   1
Mus_musculus    PNRC1   4   5   -1
Mus_musculus    RNGTT   5   6   1
Mus_musculus    CNR1    6   7   1
Mus_musculus    SPACA1  7   8   -1
Mus_musculus    AKIRIN2 8   9   1
Mus_musculus    ORC3    9   10  -1
Mus_musculus    RARS2   10  11  1
Mus_musculus    SLC35A1 11  12  -1
Rattus_norvegicus   GABRR1  1   2   1
Rattus_norvegicus   PM20D2  2   3   -1
Rattus_norvegicus   SRSF12  3   4   1
Rattus_norvegicus   PNRC1   4   5   -1
Rattus_norvegicus   RNGTT   5   6   1
Rattus_norvegicus   CNR1    6   7   1
Rattus_norvegicus   SPACA1  7   8   -1
Rattus_norvegicus   AKIRIN2 8   9   1
Rattus_norvegicus   ORC3    9   10  -1
Rattus_norvegicus   RARS2   10  11  1
Rattus_norvegicus   SLC35A1 11  12  -1
Canis_lupus_familiaris  SLC35A1 1   2   1
Canis_lupus_familiaris  RARS2   2   3   -1
Canis_lupus_familiaris  ORC3    3   4   1
Canis_lupus_familiaris  AKIRIN2 4   5   -1
Canis_lupus_familiaris  SPACA1  5   6   1
Canis_lupus_familiaris  CNR1    6   7   -1
Canis_lupus_familiaris  RNGTT   7   8   -1
Canis_lupus_familiaris  PNRC1   8   9   1
Canis_lupus_familiaris  SRSF12  9   10  -1
Canis_lupus_familiaris  PM20D2  10  11  1
Canis_lupus_familiaris  GABRR1  11  12  -1
Monodelphis_domestica   SLC35A1 1   2   1
Monodelphis_domestica   RARS2   2   3   -1
Monodelphis_domestica   ORC3    3   4   1
Monodelphis_domestica   AKIRIN2 4   5   -1
Monodelphis_domestica   SPACA1  5   6   1
Monodelphis_domestica   CNR1    6   7   -1
Monodelphis_domestica   RNGTT   7   8   -1
Monodelphis_domestica   PNRC1   8   9   1
Monodelphis_domestica   SRSF12  9   10  -1
Monodelphis_domestica   PM20D2  10  11  1
Monodelphis_domestica   GABRR1  11  12  -1
Ornithorhynchus_anatinus    SLC35A1 1   2   1
Ornithorhynchus_anatinus    RARS2   2   3   -1
Ornithorhynchus_anatinus    ORC3    3   4   1
Ornithorhynchus_anatinus    AKIRIN2 4   5   -1
Ornithorhynchus_anatinus    SPACA1  5   6   1
Ornithorhynchus_anatinus    CNR1    6   7   -1
Ornithorhynchus_anatinus    RNGTT   7   8   -1
Ornithorhynchus_anatinus    PNRC1   8   9   1
Ornithorhynchus_anatinus    PM20D2  9   10  1
Ornithorhynchus_anatinus    LOC100076186    10  11  -1
Ornithorhynchus_anatinus    LOC114805750    11  12  1
Gallus_gallus   PM20D2  1   2   -1
Gallus_gallus   PNRC1   2   3   -1
Gallus_gallus   BORCS6  3   4   1
Gallus_gallus   RNGTT   4   5   1
Gallus_gallus   LOC101749895    5   6   1
Gallus_gallus   CNR1    6   7   1
Gallus_gallus   SPACA1  7   8   -1
Gallus_gallus   AKIRIN2 8   9   1
Gallus_gallus   ORC3    9   10  -1
Gallus_gallus   RARS2   10  11  1
Gallus_gallus   SLC35A1 11  12  -1
Taeniopygia_guttata CFAP206 1   2   1
Taeniopygia_guttata SLC35A1 2   3   1
Taeniopygia_guttata RARS2   3   4   -1
Taeniopygia_guttata ORC3    4   5   1
Taeniopygia_guttata AKIRIN2 5   6   -1
Taeniopygia_guttata CNR1    6   7   -1
Taeniopygia_guttata RNGTT   7   8   -1
Taeniopygia_guttata BORCS6  8   9   -1
Taeniopygia_guttata PNRC1   9   10  1
Taeniopygia_guttata PM20D2  10  11  1
Taeniopygia_guttata GABRR1  11  12  -1
Chelonia_mydas  SLC35A1 1   2   1
Chelonia_mydas  RARS2   2   3   -1
Chelonia_mydas  ORC3    3   4   1
Chelonia_mydas  AKIRIN2 4   5   -1
Chelonia_mydas  SPACA1  5   6   1
Chelonia_mydas  CNR1    6   7   -1
Chelonia_mydas  RNGTT   7   8   -1
Chelonia_mydas  LOC102938330    8   9   -1
Chelonia_mydas  PNRC1   9   10  1
Chelonia_mydas  PM20D2  10  11  1
Chelonia_mydas  GABRR1  11  12  -1
Anolis_carolinensis PM20D2  1   2   -1
Anolis_carolinensis SRSF12  2   3   1
Anolis_carolinensis PNRC1   3   4   -1
Anolis_carolinensis RNGTT   4   5   1
Anolis_carolinensis LOC107982676    5   6   -1
Anolis_carolinensis CNR1    6   7   1
Anolis_carolinensis SPACA1  7   8   -1
Anolis_carolinensis AKIRIN2 8   9   1
Anolis_carolinensis ORC3    9   10  -1
Anolis_carolinensis RARS2   10  11  1
Anolis_carolinensis SLC35A1 11  12  -1
Xenopus_laevis  GABRR2.S    1   2   1
Xenopus_laevis  GABRR1.S    2   3   1
Xenopus_laevis  PM20D2.S    3   4   -1
Xenopus_laevis  LOC108717975    4   5   1
Xenopus_laevis  RNGTT.S 5   6   1
Xenopus_laevis  CNR1.S  6   7   1
Xenopus_laevis  AKIRIN2.S   7   8   1
Xenopus_laevis  ORC3.S  8   9   -1
Xenopus_laevis  RARS2.S 9   10  1
Xenopus_laevis  SLC35A1.S   10  11  -1
Xenopus_laevis  LOC108717977    11  12  1
Latimeria_chalumnae DDX24   1   2   -1
Latimeria_chalumnae PPP4R4  2   3   1
Latimeria_chalumnae SERPINA10B  3   4   -1
Latimeria_chalumnae ARRDC3A 4   5   1
Latimeria_chalumnae LOC102360869    5   6   -1
Latimeria_chalumnae CNR1    6   7   1
Latimeria_chalumnae SPACA1  7   8   -1
Latimeria_chalumnae AKIRIN2 8   9   1
Latimeria_chalumnae ORC3    9   10  -1
Latimeria_chalumnae RARS2   10  11  1
Latimeria_chalumnae LOC102362557    11  12  1
Protopterus_annectens   LOC122794922    1   2   1
Protopterus_annectens   LOC122794923    2   3   1
Protopterus_annectens   LOC122794924    3   4   1
Protopterus_annectens   FBXL5   4   5   1
Protopterus_annectens   CC2D2A  5   6   -1
Protopterus_annectens   CNR1    6   7   1
Protopterus_annectens   CPEB2   7   8   -1
Protopterus_annectens   BOD1L1  8   9   -1
Protopterus_annectens   C1QTNF7 9   10  -1
Protopterus_annectens   NKX3-2  10  11  1
Protopterus_annectens   RAB28   11  12  1
Danio_rerio MYO6A   1   2   1
Danio_rerio LOC569340   2   3   -1
Danio_rerio MEI4    3   4   1
Danio_rerio NT5E    4   5   1
Danio_rerio SNX14   5   6   -1
Danio_rerio CNR1    6   7   -1
Danio_rerio RNGTT   7   8   -1
Danio_rerio PNRC1   8   9   1
Danio_rerio GABRR1  9   10  -1
Danio_rerio GABRR2B 10  11  -1
Danio_rerio UBE2J1  11  12  -1
Oreochromis_niloticus   SI:DKEY-174M14.3    1   2   1
Oreochromis_niloticus   RDH14B  2   3   -1
Oreochromis_niloticus   LOC102078481    3   4   1
Oreochromis_niloticus   RNGTT   4   5   1
Oreochromis_niloticus   LOC112842425    5   6   -1
Oreochromis_niloticus   CNR1    6   7   1
Oreochromis_niloticus   AKIRIN2 7   8   1
Oreochromis_niloticus   RARS2   8   9   1
Oreochromis_niloticus   SLC35A1 9   10  -1
Oreochromis_niloticus   LOC100692709    10  11  -1
Oreochromis_niloticus   LOC102081816    11  12  1
Scyliorhinus_canicula   SLC35A1 1   2   1
Scyliorhinus_canicula   RARS2   2   3   -1
Scyliorhinus_canicula   ORC3    3   4   1
Scyliorhinus_canicula   AKIRIN2 4   5   -1
Scyliorhinus_canicula   LOC119967921    5   6   1
Scyliorhinus_canicula   CNR1    6   7   -1
Scyliorhinus_canicula   RNGTT   7   8   -1
Scyliorhinus_canicula   LOC119967175    8   9   -1
Scyliorhinus_canicula   PNRC1   9   10  1
Scyliorhinus_canicula   LOC119967178    10  11  1
Scyliorhinus_canicula   LOC119967180    11  12  -1
Petromyzon_marinus  LOC116953416    1   2   -1
Petromyzon_marinus  LOC116953419    2   3   -1
Petromyzon_marinus  CEP162  3   4   1
Petromyzon_marinus  FBXL22  4   5   -1
Petromyzon_marinus  RNGTT   5   6   1
Petromyzon_marinus  CNR1    6   7   1
Petromyzon_marinus  AKIRIN2 7   8   1
Petromyzon_marinus  ORC3    8   9   -1
Petromyzon_marinus  RARS2   9   10  1
Petromyzon_marinus  SLC35A1 10  11  -1
Petromyzon_marinus  RHBDL2  11  12  1
r ggplot2 sankey-diagram ggalluvial
1个回答
1
投票

不清楚你为什么要在这里画桑基图。每个连接只有一个流,如果将所有基因绘制在同一高度,则所有连接都是水平的。它更有意义并且作为图表更整洁:

library(tidyverse)
library(tidygraph)
library(ggraph)

data.frame(from = paste(data[[1]], data[[2]]),
           to = paste(data[[3]], data[[4]])) %>%
  filter(to != "NA NA") %>%
  as_tbl_graph() %>%
  mutate(Species = str_replace(str_remove(name, " .*"), "_", "\n"),
         Gene    = str_remove(name, ".* "),
         ypos    = as.numeric(factor(Gene)),
         xpos     = as.numeric(factor(Species, unique(Species)))) %>%
  ggraph(layout = "manual", x = xpos, y = ypos) +
  geom_edge_fan(width = 4, alpha = 0.2) +
  geom_node_point(aes(fill = Gene), shape = 22, size = 12) +
  geom_node_label(aes(label = Gene), size = 2.5) +
  geom_text(aes(x = xpos, label = Species, y = 0), check_overlap = TRUE) +
  scale_fill_viridis_d(guide = "none") +
  scale_edge_color_viridis(guide = "none") +
  theme_void()

© www.soinside.com 2019 - 2024. All rights reserved.