在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

huangapple go评论107阅读模式
英文:

Creating Sankey or Alluvial plot and stopping the flow where the "next_node" and "next_x" value is "NA" in R

问题

I am trying to create a Sankey or Alluvial plot using the ggplot2 library in R to visualize the flow of nodes based on the provided CSV data. The data includes columns for 'x', 'node', 'next_x', and 'next_node'. I want to create a plot where the flow is determined by the 'node' and 'next_node' columns. Additionally, I want to exclude any flows where 'next_x' is "NA".

Here's a simplified version of the CSV data I'm working with:

  1. x node next_x next_node
  2. Homo_sapiens SLC35A1 Mus_musculus SLC35A1
  3. Homo_sapiens RARS2 Mus_musculus RARS2
  4. Homo_sapiens ORC3 Mus_musculus ORC3
  5. Homo_sapiens AKIRIN2 Mus_musculus AKIRIN2
  6. Homo_sapiens SPACA1 Mus_musculus SPACA1
  7. Homo_sapiens CNR1 Mus_musculus CNR1
  8. Homo_sapiens RNGTT Mus_musculus RNGTT
  9. Homo_sapiens PNRC1 Mus_musculus PNRC1
  10. Homo_sapiens PM20D2 Mus_musculus PM20D2
  11. Homo_sapiens SRSF12 Mus_musculus SRSF12
  12. Homo_sapiens GABRR1 Mus_musculus GABRR1
  13. Mus_musculus GABRR1 Rattus_norvegicus GABRR1
  14. Mus_musculus PM20D2 Rattus_norvegicus PM20D2
  15. Mus_musculus SRSF12 Rattus_norvegicus SRSF12
  16. Mus_musculus PNRC1 Rattus_norvegicus PNRC1
  17. Mus_musculus RNGTT Rattus_norvegicus RNGTT
  18. Mus_musculus CNR1 Rattus_norvegicus CNR1
  19. Mus_musculus SPACA1 Rattus_norvegicus SPACA1
  20. Mus_musculus AKIRIN2 Rattus_norvegicus AKIRIN2
  21. Mus_musculus ORC3 Rattus_norvegicus ORC3
  22. Mus_musculus RARS2 Rattus_norvegicus RARS2
  23. Mus_musculus SLC35A1 Rattus_norvegicus SLC35A1
  24. Rattus_norvegicus GABRR1 Canis_lupus_familiaris GABRR1
  25. ...

I'm using the ggplot2 library to create the plot, and I've tried the following script:

  1. library(ggplot2)
  2. pl <- ggplot(data, aes(x = x, node = node, next_node = next_node, next_x = next_x, fill = factor(node), label = node)) +
  3. geom_sankey(flow.alpha = 0.5,
  4. node.color = "black",
  5. show.legend = FALSE,
  6. na.rm = TRUE) +
  7. geom_sankey_label(size = 3, color = "black", fill="white", hjust = 0.5) +
  8. theme_bw() +
  9. theme(legend.position = "none") +
  10. theme(axis.title = element_blank(),
  11. axis.text.y = element_blank(),
  12. axis.ticks = element_blank(),
  13. panel.grid = element_blank()) +
  14. scale_fill_viridis_d(option = "inferno") +
  15. labs(title = "Sankey diagram using ggplot",
  16. fill = "Nodes")

However, when I run this script, I'm encountering the following warning messages:

  1. Warning messages:
  2. 1: There was 1 warning in `dplyr::mutate()`.
  3. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
  4. Caused by warning:
  5. ! NAs introduced by coercion
  6. 2: There was 1 warning in `dplyr::mutate()`.
  7. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
  8. Caused by warning:
  9. ! NAs introduced by coercion
  10. 3: There was 1 warning in `dplyr::mutate()`.
  11. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = ("n_{.col}"))`.
  12. Caused by warning:
  13. ! NAs introduced by coercion

I also get an incomplete plot.

I'm seeking guidance on how to address this issue and successfully create the desired Sankey or Alluvial plot using ggplot2. Specifically, I want to achieve the following:

  1. Create a plot where the flow is based on 'node
英文:

I am trying to create a Sankey or Alluvial plot using the ggplot2 library in R to visualize the flow of nodes based on the provided CSV data. The data includes columns for 'x', 'node', 'next_x', and 'next_node'. I want to create a plot where the flow is determined by the 'node' and 'next_node' columns. Additionally, I want to exclude any flows where 'next_x' is "NA".

Here's a simplified version of the CSV data I'm working with:

  1. x node next_x next_node
  2. Homo_sapiens SLC35A1 Mus_musculus SLC35A1
  3. Homo_sapiens RARS2 Mus_musculus RARS2
  4. Homo_sapiens ORC3 Mus_musculus ORC3
  5. Homo_sapiens AKIRIN2 Mus_musculus AKIRIN2
  6. Homo_sapiens SPACA1 Mus_musculus SPACA1
  7. Homo_sapiens CNR1 Mus_musculus CNR1
  8. Homo_sapiens RNGTT Mus_musculus RNGTT
  9. Homo_sapiens PNRC1 Mus_musculus PNRC1
  10. Homo_sapiens PM20D2 Mus_musculus PM20D2
  11. Homo_sapiens SRSF12 Mus_musculus SRSF12
  12. Homo_sapiens GABRR1 Mus_musculus GABRR1
  13. Mus_musculus GABRR1 Rattus_norvegicus GABRR1
  14. Mus_musculus PM20D2 Rattus_norvegicus PM20D2
  15. Mus_musculus SRSF12 Rattus_norvegicus SRSF12
  16. Mus_musculus PNRC1 Rattus_norvegicus PNRC1
  17. Mus_musculus RNGTT Rattus_norvegicus RNGTT
  18. Mus_musculus CNR1 Rattus_norvegicus CNR1
  19. Mus_musculus SPACA1 Rattus_norvegicus SPACA1
  20. Mus_musculus AKIRIN2 Rattus_norvegicus AKIRIN2
  21. Mus_musculus ORC3 Rattus_norvegicus ORC3
  22. Mus_musculus RARS2 Rattus_norvegicus RARS2
  23. Mus_musculus SLC35A1 Rattus_norvegicus SLC35A1
  24. Rattus_norvegicus GABRR1 Canis_lupus_familiaris GABRR1
  25. Rattus_norvegicus PM20D2 Canis_lupus_familiaris PM20D2
  26. Rattus_norvegicus SRSF12 Canis_lupus_familiaris SRSF12
  27. Rattus_norvegicus PNRC1 Canis_lupus_familiaris PNRC1
  28. Rattus_norvegicus RNGTT Canis_lupus_familiaris RNGTT
  29. Rattus_norvegicus CNR1 Canis_lupus_familiaris CNR1
  30. Rattus_norvegicus SPACA1 Canis_lupus_familiaris SPACA1
  31. Rattus_norvegicus AKIRIN2 Canis_lupus_familiaris AKIRIN2
  32. Rattus_norvegicus ORC3 Canis_lupus_familiaris ORC3
  33. Rattus_norvegicus RARS2 Canis_lupus_familiaris RARS2
  34. Rattus_norvegicus SLC35A1 Canis_lupus_familiaris SLC35A1
  35. Canis_lupus_familiaris SLC35A1 Monodelphis_domestica SLC35A1
  36. Canis_lupus_familiaris RARS2 Monodelphis_domestica RARS2
  37. Canis_lupus_familiaris ORC3 Monodelphis_domestica ORC3
  38. Canis_lupus_familiaris AKIRIN2 Monodelphis_domestica AKIRIN2
  39. Canis_lupus_familiaris SPACA1 Monodelphis_domestica SPACA1
  40. Canis_lupus_familiaris CNR1 Monodelphis_domestica CNR1
  41. Canis_lupus_familiaris RNGTT Monodelphis_domestica RNGTT
  42. Canis_lupus_familiaris PNRC1 Monodelphis_domestica PNRC1
  43. Canis_lupus_familiaris SRSF12 Monodelphis_domestica SRSF12
  44. Canis_lupus_familiaris PM20D2 Monodelphis_domestica PM20D2
  45. Canis_lupus_familiaris GABRR1 Monodelphis_domestica GABRR1
  46. Monodelphis_domestica SLC35A1 Ornithorhynchus_anatinus SLC35A1
  47. Monodelphis_domestica RARS2 Ornithorhynchus_anatinus RARS2
  48. Monodelphis_domestica ORC3 Ornithorhynchus_anatinus ORC3
  49. Monodelphis_domestica AKIRIN2 Ornithorhynchus_anatinus AKIRIN2
  50. Monodelphis_domestica SPACA1 Ornithorhynchus_anatinus SPACA1
  51. Monodelphis_domestica CNR1 Ornithorhynchus_anatinus CNR1
  52. Monodelphis_domestica RNGTT Ornithorhynchus_anatinus RNGTT
  53. Monodelphis_domestica PNRC1 Ornithorhynchus_anatinus PNRC1
  54. Monodelphis_domestica SRSF12 NA NA
  55. Monodelphis_domestica PM20D2 Ornithorhynchus_anatinus PM20D2
  56. Monodelphis_domestica GABRR1 NA NA
  57. Ornithorhynchus_anatinus SLC35A1 Gallus_gallus SLC35A1
  58. Ornithorhynchus_anatinus RARS2 Gallus_gallus RARS2
  59. Ornithorhynchus_anatinus ORC3 Gallus_gallus ORC3
  60. Ornithorhynchus_anatinus AKIRIN2 Gallus_gallus AKIRIN2
  61. Ornithorhynchus_anatinus SPACA1 Gallus_gallus SPACA1
  62. Ornithorhynchus_anatinus CNR1 Gallus_gallus CNR1
  63. Ornithorhynchus_anatinus RNGTT Gallus_gallus RNGTT
  64. Ornithorhynchus_anatinus PNRC1 Gallus_gallus PNRC1
  65. Ornithorhynchus_anatinus PM20D2 Gallus_gallus PM20D2
  66. Ornithorhynchus_anatinus LOC100076186 NA NA
  67. Ornithorhynchus_anatinus LOC114805750 NA NA
  68. Gallus_gallus PM20D2 Taeniopygia_guttata PM20D2
  69. Gallus_gallus PNRC1 Taeniopygia_guttata PNRC1
  70. Gallus_gallus BORCS6 Taeniopygia_guttata BORCS6
  71. Gallus_gallus RNGTT Taeniopygia_guttata RNGTT
  72. Gallus_gallus LOC101749895 NA NA
  73. Gallus_gallus CNR1 Taeniopygia_guttata CNR1
  74. Gallus_gallus SPACA1 NA NA
  75. Gallus_gallus AKIRIN2 Taeniopygia_guttata AKIRIN2
  76. Gallus_gallus ORC3 Taeniopygia_guttata ORC3
  77. Gallus_gallus RARS2 Taeniopygia_guttata RARS2
  78. Gallus_gallus SLC35A1 Taeniopygia_guttata SLC35A1
  79. Taeniopygia_guttata CFAP206 NA NA
  80. Taeniopygia_guttata SLC35A1 Chelonia_mydas SLC35A1
  81. Taeniopygia_guttata RARS2 Chelonia_mydas RARS2
  82. Taeniopygia_guttata ORC3 Chelonia_mydas ORC3
  83. Taeniopygia_guttata AKIRIN2 Chelonia_mydas AKIRIN2
  84. Taeniopygia_guttata CNR1 Chelonia_mydas CNR1
  85. Taeniopygia_guttata RNGTT Chelonia_mydas RNGTT
  86. Taeniopygia_guttata BORCS6 NA NA
  87. Taeniopygia_guttata PNRC1 Chelonia_mydas PNRC1
  88. Taeniopygia_guttata PM20D2 Chelonia_mydas PM20D2
  89. Taeniopygia_guttata GABRR1 Chelonia_mydas GABRR1
  90. Chelonia_mydas SLC35A1 Anolis_carolinensis SLC35A1
  91. Chelonia_mydas RARS2 Anolis_carolinensis RARS2
  92. Chelonia_mydas ORC3 Anolis_carolinensis ORC3
  93. Chelonia_mydas AKIRIN2 Anolis_carolinensis AKIRIN2
  94. Chelonia_mydas SPACA1 Anolis_carolinensis SPACA1
  95. Chelonia_mydas CNR1 Anolis_carolinensis CNR1
  96. Chelonia_mydas RNGTT Anolis_carolinensis RNGTT
  97. Chelonia_mydas LOC102938330 NA NA
  98. Chelonia_mydas PNRC1 Anolis_carolinensis PNRC1
  99. Chelonia_mydas PM20D2 Anolis_carolinensis PM20D2
  100. Chelonia_mydas GABRR1 NA NA
  101. Anolis_carolinensis PM20D2 NA NA
  102. Anolis_carolinensis SRSF12 NA NA
  103. Anolis_carolinensis PNRC1 NA NA
  104. Anolis_carolinensis RNGTT NA NA
  105. Anolis_carolinensis LOC107982676 NA NA
  106. Anolis_carolinensis CNR1 NA NA
  107. Anolis_carolinensis SPACA1 NA NA
  108. Anolis_carolinensis AKIRIN2 NA NA
  109. Anolis_carolinensis ORC3 NA NA
  110. Anolis_carolinensis RARS2 NA NA
  111. Anolis_carolinensis SLC35A1 NA NA
  112. Xenopus_laevis GABRR2.S NA NA
  113. Xenopus_laevis GABRR1.S NA NA
  114. Xenopus_laevis PM20D2.S NA NA
  115. Xenopus_laevis LOC108717975 NA NA
  116. Xenopus_laevis RNGTT.S NA NA
  117. Xenopus_laevis CNR1.S NA NA
  118. Xenopus_laevis AKIRIN2.S NA NA
  119. Xenopus_laevis ORC3.S NA NA
  120. Xenopus_laevis RARS2.S NA NA
  121. Xenopus_laevis SLC35A1.S NA NA
  122. Xenopus_laevis LOC108717977 NA NA
  123. Latimeria_chalumnae DDX24 NA NA
  124. Latimeria_chalumnae PPP4R4 NA NA
  125. Latimeria_chalumnae SERPINA10B NA NA
  126. Latimeria_chalumnae ARRDC3A NA NA
  127. Latimeria_chalumnae LOC102360869 NA NA
  128. Latimeria_chalumnae CNR1 Protopterus_annectens CNR1
  129. Latimeria_chalumnae SPACA1 NA NA
  130. Latimeria_chalumnae AKIRIN2 NA NA
  131. Latimeria_chalumnae ORC3 NA NA
  132. Latimeria_chalumnae RARS2 NA NA
  133. Latimeria_chalumnae LOC102362557 NA NA
  134. Protopterus_annectens LOC122794922 NA NA
  135. Protopterus_annectens LOC122794923 NA NA
  136. Protopterus_annectens LOC122794924 NA NA
  137. Protopterus_annectens FBXL5 NA NA
  138. Protopterus_annectens CC2D2A NA NA
  139. Protopterus_annectens CNR1 Danio_rerio CNR1
  140. Protopterus_annectens CPEB2 NA NA
  141. Protopterus_annectens BOD1L1 NA NA
  142. Protopterus_annectens C1QTNF7 NA NA
  143. Protopterus_annectens NKX3-2 NA NA
  144. Protopterus_annectens RAB28 NA NA
  145. Danio_rerio MYO6A NA NA
  146. Danio_rerio LOC569340 NA NA
  147. Danio_rerio MEI4 NA NA
  148. Danio_rerio NT5E NA NA
  149. Danio_rerio SNX14 NA NA
  150. Danio_rerio CNR1 Oreochromis_niloticus CNR1
  151. Danio_rerio RNGTT Oreochromis_niloticus RNGTT
  152. Danio_rerio PNRC1 NA NA
  153. Danio_rerio GABRR1 NA NA
  154. Danio_rerio GABRR2B NA NA
  155. Danio_rerio UBE2J1 NA NA
  156. Oreochromis_niloticus SI:DKEY-174M14.3 NA NA
  157. Oreochromis_niloticus RDH14B NA NA
  158. Oreochromis_niloticus LOC102078481 NA NA
  159. Oreochromis_niloticus RNGTT Scyliorhinus_canicula RNGTT
  160. Oreochromis_niloticus LOC112842425 NA NA
  161. Oreochromis_niloticus CNR1 Scyliorhinus_canicula CNR1
  162. Oreochromis_niloticus AKIRIN2 Scyliorhinus_canicula AKIRIN2
  163. Oreochromis_niloticus RARS2 Scyliorhinus_canicula RARS2
  164. Oreochromis_niloticus SLC35A1 Scyliorhinus_canicula SLC35A1
  165. Oreochromis_niloticus LOC100692709 NA NA
  166. Oreochromis_niloticus LOC102081816 NA NA
  167. Scyliorhinus_canicula SLC35A1 Petromyzon_marinus SLC35A1
  168. Scyliorhinus_canicula RARS2 Petromyzon_marinus RARS2
  169. Scyliorhinus_canicula ORC3 Petromyzon_marinus ORC3
  170. Scyliorhinus_canicula AKIRIN2 Petromyzon_marinus AKIRIN2
  171. Scyliorhinus_canicula LOC119967921 NA NA
  172. Scyliorhinus_canicula CNR1 Petromyzon_marinus CNR1
  173. Scyliorhinus_canicula RNGTT Petromyzon_marinus RNGTT
  174. Scyliorhinus_canicula LOC119967175 NA NA
  175. Scyliorhinus_canicula PNRC1 NA NA
  176. Scyliorhinus_canicula LOC119967178 NA NA
  177. Scyliorhinus_canicula LOC119967180 NA NA
  178. Petromyzon_marinus LOC116953416 NA NA
  179. Petromyzon_marinus LOC116953419 NA NA
  180. Petromyzon_marinus CEP162 NA NA
  181. Petromyzon_marinus FBXL22 NA NA
  182. Petromyzon_marinus RNGTT NA NA
  183. Petromyzon_marinus CNR1 NA NA
  184. Petromyzon_marinus AKIRIN2 NA NA
  185. Petromyzon_marinus ORC3 NA NA
  186. Petromyzon_marinus RARS2 NA NA
  187. Petromyzon_marinus SLC35A1 NA NA
  188. Petromyzon_marinus RHBDL2 NA NA

I'm using the ggplot2 library to create the plot, and I've tried the following script:

  1. library(ggplot2)
  2. pl &lt;- ggplot(data, aes(x = x, node = node, next_node = next_node, next_x = next_x, fill = factor(node), label = node)) +
  3. geom_sankey(flow.alpha = 0.5,
  4. node.color = &quot;black&quot;,
  5. show.legend = FALSE,
  6. na.rm = TRUE) +
  7. geom_sankey_label(size = 3, color = &quot;black&quot;, fill=&quot;white&quot;, hjust = 0.5) +
  8. theme_bw() +
  9. theme(legend.position = &quot;none&quot;) +
  10. theme(axis.title = element_blank(),
  11. axis.text.y = element_blank(),
  12. axis.ticks = element_blank(),
  13. panel.grid = element_blank()) +
  14. scale_fill_viridis_d(option = &quot;inferno&quot;) +
  15. labs(title = &quot;Sankey diagram using ggplot&quot;,
  16. fill = &quot;Nodes&quot;)

However, when I run this script, I'm encountering the following warning messages:

  1. Warning messages:
  2. 1: There was 1 warning in `dplyr::mutate()`.
  3. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = (&quot;n_{.col}&quot;))`.
  4. Caused by warning:
  5. ! NAs introduced by coercion
  6. 2: There was 1 warning in `dplyr::mutate()`.
  7. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = (&quot;n_{.col}&quot;))`.
  8. Caused by warning:
  9. ! NAs introduced by coercion
  10. 3: There was 1 warning in `dplyr::mutate()`.
  11. In argument: `dplyr::across(c(x, next_x), ~as.numeric(.), .names = (&quot;n_{.col}&quot;))`.
  12. Caused by warning:
  13. ! NAs introduced by coercion

I also get an incomplete plot:

Incomplete Sankey plot without flow

I'm seeking guidance on how to address this issue and successfully create the desired Sankey or Alluvial plot using ggplot2. Specifically, I want to achieve the following:

  1. Create a plot where the flow is based on 'node' and 'next_node'.
  2. Exclude flows where 'next_x' is "NA".
  3. Avoid the warning messages related to dplyr::mutate() and NAs.

Any assistance or insights into solving this problem would be greatly appreciated. Thank you in advance!

Edit:

This is my raw dataset of gene neighbors:

  1. species gene start stop orientation
  2. Homo_sapiens SLC35A1 1 2 1
  3. Homo_sapiens RARS2 2 3 -1
  4. Homo_sapiens ORC3 3 4 1
  5. Homo_sapiens AKIRIN2 4 5 -1
  6. Homo_sapiens SPACA1 5 6 1
  7. Homo_sapiens CNR1 6 7 -1
  8. Homo_sapiens RNGTT 7 8 -1
  9. Homo_sapiens PNRC1 8 9 1
  10. Homo_sapiens PM20D2 9 10 1
  11. Homo_sapiens SRSF12 10 11 -1
  12. Homo_sapiens GABRR1 11 12 -1
  13. Mus_musculus GABRR1 1 2 1
  14. Mus_musculus PM20D2 2 3 -1
  15. Mus_musculus SRSF12 3 4 1
  16. Mus_musculus PNRC1 4 5 -1
  17. Mus_musculus RNGTT 5 6 1
  18. Mus_musculus CNR1 6 7 1
  19. Mus_musculus SPACA1 7 8 -1
  20. Mus_musculus AKIRIN2 8 9 1
  21. Mus_musculus ORC3 9 10 -1
  22. Mus_musculus RARS2 10 11 1
  23. Mus_musculus SLC35A1 11 12 -1
  24. Rattus_norvegicus GABRR1 1 2 1
  25. Rattus_norvegicus PM20D2 2 3 -1
  26. Rattus_norvegicus SRSF12 3 4 1
  27. Rattus_norvegicus PNRC1 4 5 -1
  28. Rattus_norvegicus RNGTT 5 6 1
  29. Rattus_norvegicus CNR1 6 7 1
  30. Rattus_norvegicus SPACA1 7 8 -1
  31. Rattus_norvegicus AKIRIN2 8 9 1
  32. Rattus_norvegicus ORC3 9 10 -1
  33. Rattus_norvegicus RARS2 10 11 1
  34. Rattus_norvegicus SLC35A1 11 12 -1
  35. Canis_lupus_familiaris SLC35A1 1 2 1
  36. Canis_lupus_familiaris RARS2 2 3 -1
  37. Canis_lupus_familiaris ORC3 3 4 1
  38. Canis_lupus_familiaris AKIRIN2 4 5 -1
  39. Canis_lupus_familiaris SPACA1 5 6 1
  40. Canis_lupus_familiaris CNR1 6 7 -1
  41. Canis_lupus_familiaris RNGTT 7 8 -1
  42. Canis_lupus_familiaris PNRC1 8 9 1
  43. Canis_lupus_familiaris SRSF12 9 10 -1
  44. Canis_lupus_familiaris PM20D2 10 11 1
  45. Canis_lupus_familiaris GABRR1 11 12 -1
  46. Monodelphis_domestica SLC35A1 1 2 1
  47. Monodelphis_domestica RARS2 2 3 -1
  48. Monodelphis_domestica ORC3 3 4 1
  49. Monodelphis_domestica AKIRIN2 4 5 -1
  50. Monodelphis_domestica SPACA1 5 6 1
  51. Monodelphis_domestica CNR1 6 7 -1
  52. Monodelphis_domestica RNGTT 7 8 -1
  53. Monodelphis_domestica PNRC1 8 9 1
  54. Monodelphis_domestica SRSF12 9 10 -1
  55. Monodelphis_domestica PM20D2 10 11 1
  56. Monodelphis_domestica GABRR1 11 12 -1
  57. Ornithorhynchus_anatinus SLC35A1 1 2 1
  58. Ornithorhynchus_anatinus RARS2 2 3 -1
  59. Ornithorhynchus_anatinus ORC3 3 4 1
  60. Ornithorhynchus_anatinus AKIRIN2 4 5 -1
  61. Ornithorhynchus_anatinus SPACA1 5 6 1
  62. Ornithorhynchus_anatinus CNR1 6 7 -1
  63. Ornithorhynchus_anatinus RNGTT 7 8 -1
  64. Ornithorhynchus_anatinus PNRC1 8 9 1
  65. Ornithorhynchus_anatinus PM20D2 9 10 1
  66. Ornithorhynchus_anatinus LOC100076186 10 11 -1
  67. Ornithorhynchus_anatinus LOC114805750 11 12 1
  68. Gallus_gallus PM20D2 1 2 -1
  69. Gallus_gallus PNRC1 2 3 -1
  70. Gallus_gallus BORCS6 3 4 1
  71. Gallus_gallus RNGTT 4 5 1
  72. Gallus_gallus LOC101749895 5 6 1
  73. Gallus_gallus CNR1 6 7 1
  74. Gallus_gallus SPACA1 7 8 -1
  75. Gallus_gallus AKIRIN2 8 9 1
  76. Gallus_gallus ORC3 9 10 -1
  77. Gallus_gallus RARS2 10 11 1
  78. Gallus_gallus SLC35A1 11 12 -1
  79. Taeniopygia_guttata CFAP206 1 2 1
  80. Taeniopygia_guttata SLC35A1 2 3 1
  81. Taeniopygia_guttata RARS2 3 4 -1
  82. Taeniopygia_guttata ORC3 4 5 1
  83. Taeniopygia_guttata AKIRIN2 5 6 -1
  84. Taeniopygia_guttata CNR1 6 7 -1
  85. Taeniopygia_guttata RNGTT 7 8 -1
  86. Taeniopygia_guttata BORCS6 8 9 -1
  87. Taeniopygia_guttata PNRC1 9 10 1
  88. Taeniopygia_guttata PM20D2 10 11 1
  89. Taeniopygia_guttata GABRR1 11 12 -1
  90. Chelonia_mydas SLC35A1 1 2 1
  91. Chelonia_mydas RARS2 2 3 -1
  92. Chelonia_mydas ORC3 3 4 1
  93. Chelonia_mydas AKIRIN2 4 5 -1
  94. Chelonia_mydas SPACA1 5 6 1
  95. Chelonia_mydas CNR1 6 7 -1
  96. Chelonia_mydas RNGTT 7 8 -1
  97. Chelonia_mydas LOC102938330 8 9 -1
  98. Chelonia_mydas PNRC1 9 10 1
  99. Chelonia_mydas PM20D2 10 11 1
  100. Chelonia_mydas GABRR1 11 12 -1
  101. Anolis_carolinensis PM20D2 1 2 -1
  102. Anolis_carolinensis SRSF12 2 3 1
  103. Anolis_carolinensis PNRC1 3 4 -1
  104. Anolis_carolinensis RNGTT 4 5 1
  105. Anolis_carolinensis LOC107982676 5 6 -1
  106. Anolis_carolinensis CNR1 6 7 1
  107. Anolis_carolinensis SPACA1 7 8 -1
  108. Anolis_carolinensis AKIRIN2 8 9 1
  109. Anolis_carolinensis ORC3 9 10 -1
  110. Anolis_carolinensis RARS2 10 11 1
  111. Anolis_carolinensis SLC35A1 11 12 -1
  112. Xenopus_laevis GABRR2.S 1 2 1
  113. Xenopus_laevis GABRR1.S 2 3 1
  114. Xenopus_laevis PM20D2.S 3 4 -1
  115. Xenopus_laevis LOC108717975 4 5 1
  116. Xenopus_laevis RNGTT.S 5 6 1
  117. Xenopus_laevis CNR1.S 6 7 1
  118. Xenopus_laevis AKIRIN2.S 7 8 1
  119. Xenopus_laevis ORC3.S 8 9 -1
  120. Xenopus_laevis RARS2.S 9 10 1
  121. Xenopus_laevis SLC35A1.S 10 11 -1
  122. Xenopus_laevis LOC108717977 11 12 1
  123. Latimeria_chalumnae DDX24 1 2 -1
  124. Latimeria_chalumnae PPP4R4 2 3 1
  125. Latimeria_chalumnae SERPINA10B 3 4 -1
  126. Latimeria_chalumnae ARRDC3A 4 5 1
  127. Latimeria_chalumnae LOC102360869 5 6 -1
  128. Latimeria_chalumnae CNR1 6 7 1
  129. Latimeria_chalumnae SPACA1 7 8 -1
  130. Latimeria_chalumnae AKIRIN2 8 9 1
  131. Latimeria_chalumnae ORC3 9 10 -1
  132. Latimeria_chalumnae RARS2 10 11 1
  133. Latimeria_chalumnae LOC102362557 11 12 1
  134. Protopterus_annectens LOC122794922 1 2 1
  135. Protopterus_annectens LOC122794923 2 3 1
  136. Protopterus_annectens LOC122794924 3 4 1
  137. Protopterus_annectens FBXL5 4 5 1
  138. Protopterus_annectens CC2D2A 5 6 -1
  139. Protopterus_annectens CNR1 6 7 1
  140. Protopterus_annectens CPEB2 7 8 -1
  141. Protopterus_annectens BOD1L1 8 9 -1
  142. Protopterus_annectens C1QTNF7 9 10 -1
  143. Protopterus_annectens NKX3-2 10 11 1
  144. Protopterus_annectens RAB28 11 12 1
  145. Danio_rerio MYO6A 1 2 1
  146. Danio_rerio LOC569340 2 3 -1
  147. Danio_rerio MEI4 3 4 1
  148. Danio_rerio NT5E 4 5 1
  149. Danio_rerio SNX14 5 6 -1
  150. Danio_rerio CNR1 6 7 -1
  151. Danio_rerio RNGTT 7 8 -1
  152. Danio_rerio PNRC1 8 9 1
  153. Danio_rerio GABRR1 9 10 -1
  154. Danio_rerio GABRR2B 10 11 -1
  155. Danio_rerio UBE2J1 11 12 -1
  156. Oreochromis_niloticus SI:DKEY-174M14.3 1 2 1
  157. Oreochromis_niloticus RDH14B 2 3 -1
  158. Oreochromis_niloticus LOC102078481 3 4 1
  159. Oreochromis_niloticus RNGTT 4 5 1
  160. Oreochromis_niloticus LOC112842425 5 6 -1
  161. Oreochromis_niloticus CNR1 6 7 1
  162. Oreochromis_niloticus AKIRIN2 7 8 1
  163. Oreochromis_niloticus RARS2 8 9 1
  164. Oreochromis_niloticus SLC35A1 9 10 -1
  165. Oreochromis_niloticus LOC100692709 10 11 -1
  166. Oreochromis_niloticus LOC102081816 11 12 1
  167. Scyliorhinus_canicula SLC35A1 1 2 1
  168. Scyliorhinus_canicula RARS2 2 3 -1
  169. Scyliorhinus_canicula ORC3 3 4 1
  170. Scyliorhinus_canicula AKIRIN2 4 5 -1
  171. Scyliorhinus_canicula LOC119967921 5 6 1
  172. Scyliorhinus_canicula CNR1 6 7 -1
  173. Scyliorhinus_canicula RNGTT 7 8 -1
  174. Scyliorhinus_canicula LOC119967175 8 9 -1
  175. Scyliorhinus_canicula PNRC1 9 10 1
  176. Scyliorhinus_canicula LOC119967178 10 11 1
  177. Scyliorhinus_canicula LOC119967180 11 12 -1
  178. Petromyzon_marinus LOC116953416 1 2 -1
  179. Petromyzon_marinus LOC116953419 2 3 -1
  180. Petromyzon_marinus CEP162 3 4 1
  181. Petromyzon_marinus FBXL22 4 5 -1
  182. Petromyzon_marinus RNGTT 5 6 1
  183. Petromyzon_marinus CNR1 6 7 1
  184. Petromyzon_marinus AKIRIN2 7 8 1
  185. Petromyzon_marinus ORC3 8 9 -1
  186. Petromyzon_marinus RARS2 9 10 1
  187. Petromyzon_marinus SLC35A1 10 11 -1
  188. Petromyzon_marinus RHBDL2 11 12 1

Edit 2:

I've managed to get few flows connected but it is still incorrect. The problem is probably with the order of the rows. Can somebody please suggest something?
在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

答案1

得分: 1

这里不清楚为什么你要尝试绘制桑基图。每个连接只有单一的流动,如果你将所有基因都绘制在同一高度,那么所有连接都是水平的。将其绘制成图表更有意义且更整洁:

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

你甚至可以将其绘制成点线图:

  1. library(tidyverse)
  2. levs <- names(sort(table(c(data$node, data$next_node))))
  3. data %>%
  4. mutate(x = gsub("_", "\n", x), next_x = gsub("_", "\n", next_x)) %>%
  5. mutate(node = factor(node, levs),
  6. next_node = factor(next_node, levs)) %>%
  7. ggplot(aes(x, node, color = node)) +
  8. geom_segment(aes(xend = next_x, yend = next_node), linewidth = 1) +
  9. geom_point(size = 2.5) +
  10. geom_point(aes(x = next_x, y = next_node), size = 2.5) +
  11. scale_color_viridis_d(guide = "none") +
  12. scale_y_discrete(limits = levs) +
  13. theme_minimal()

在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

英文:

It's not clear why you are trying to draw a Sankey diagram here. Each connection only has a single flow, and if you draw all the genes at the same height, all the connections are horizontal. It makes more sense and is tidier as a graph:

  1. library(tidyverse)
  2. library(tidygraph)
  3. library(ggraph)
  4. data.frame(from = paste(data[[1]], data[[2]]),
  5. to = paste(data[[3]], data[[4]])) %&gt;%
  6. filter(to != &quot;NA NA&quot;) %&gt;%
  7. as_tbl_graph() %&gt;%
  8. mutate(Species = str_replace(str_remove(name, &quot; .*&quot;), &quot;_&quot;, &quot;\n&quot;),
  9. Gene = str_remove(name, &quot;.* &quot;),
  10. ypos = as.numeric(factor(Gene)),
  11. xpos = as.numeric(factor(Species, unique(Species)))) %&gt;%
  12. ggraph(layout = &quot;manual&quot;, x = xpos, y = ypos) +
  13. geom_edge_fan(width = 4, alpha = 0.2) +
  14. geom_node_point(aes(fill = Gene), shape = 22, size = 12) +
  15. geom_node_label(aes(label = Gene), size = 2.5) +
  16. geom_text(aes(x = xpos, label = Species, y = 0), check_overlap = TRUE) +
  17. scale_fill_viridis_d(guide = &quot;none&quot;) +
  18. scale_edge_color_viridis(guide = &quot;none&quot;) +
  19. theme_void()

在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

You could even just do it as a dot-and-line plot:

  1. library(tidyverse)
  2. levs &lt;- names(sort(table(c(data$node, data$next_node))))
  3. data %&gt;%
  4. mutate(x = gsub(&quot;_&quot;, &quot;\n&quot;, x), next_x = gsub(&quot;_&quot;, &quot;\n&quot;, next_x)) %&gt;%
  5. mutate(node = factor(node, levs),
  6. next_node = factor(next_node, levs)) %&gt;%
  7. ggplot(aes(x, node, color = node)) +
  8. geom_segment(aes(xend = next_x, yend = next_node), linewidth = 1) +
  9. geom_point(size = 2.5) +
  10. geom_point(aes(x = next_x, y = next_node), size = 2.5) +
  11. scale_color_viridis_d(guide = &quot;none&quot;) +
  12. scale_y_discrete(limits = levs) +
  13. theme_minimal()

在R中创建Sankey或Alluvial图,并在”next_node”和”next_x”值为”NA”时停止流动。

huangapple
  • 本文由 发表于 2023年8月4日 01:30:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76830369.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定