R优雅的绘制三元相图

本节来介绍如何通过Ternary绘制3元相图

加载R包

install.packages('Ternary')
library(tidyverse)
library(Ternary)

加载数据

scooby <- read_csv('scoobydoo.csv')

数据清洗

数据清洗部分请参考tidyverse数据处理教程汇总这篇文档

df <- scooby %>%
  select(index, starts_with("unmask_"), ends_with("_amount")) %>%
  select(-unmask_other) %>%
  pivot_longer(cols = starts_with("unmask_"),
    names_to = "who_unmasked",
    values_to = "tmp",
    names_prefix = "unmask_") %>%
  filter(tmp != "FALSE") %>%
  select(-tmp) %>%
  group_by(who_unmasked) %>%
  summarise(
    monsters = sum(monster_amount),
    suspects = sum(suspects_amount),
    culprits = sum(culprit_amount)
  ) %>% janitor::adorn_percentages(denominator = "col") %>%
  select(monsters, suspects, culprits, who_unmasked) %>%
  add_column(color = cbPalette8[c(1, 7, 4, 6, 3)]) %>%
  mutate(who_unmasked = str_to_title(who_unmasked))
triangle <- matrix(c(50,50,0,50,0,
                     50,0,50,50),ncol=3,byrow = TRUE)

创建画布

TernaryPlot函数会创建一个空白图

TernaryPlot(
  alab = "A \u2192",
  blab = "B \u2192",
  clab = "\u2190 C",
  lab.cex = 1.5,
  col = "#FFFFFF",
  grid.lines = 10,
  grid.col = "#DDDDDD",
  grid.lty = "solid",
  grid.lwd = 1,
  grid.minor.lines = 4,
  grid.minor.col = "#EEEEEE",
  grid.minor.lty = "solid",
  grid.minor.lwd = 1)

添加线条

TernaryPolygon(triangle, border = 'green')
TernaryLines(list(c(0, 50, 0), c(50, 0, 50)), lty = 2, col = "red")
TernaryLines(list(c(0, 0, 50), c(50, 50, 0)), lty = 2, col = "blue")
TernaryLines(list(c(50, 0, 0), c(0, 50, 50)), lty = 2, col = "yellow")

添加点&文本

TernaryPoints(df[1:3], col = df$color, pch = 16, cex = 1.5)
TernaryText(df[,1:3],
            labels = df$who_unmasked,
            col = df$color, pos = 4,cex =1)

喜欢的小伙伴欢迎关注我的公众号

R语言数据分析指南,持续分享数据可视化的经典案例及一些生信知识,希望对大家有所帮助

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是三元相图 三元图是重心图的一种,它有三个变量,但需要三者总和为恒定值。在一个等边三角形坐标系中,图中某一点的...
    周运来就是我阅读 69,577评论 8 44
  • 三元图的应用场景:三分组以上, 直观展示某个因素(可数值量化的)在三个条件下的倾向性! 1. 直观展示基因表达在三...
    Clariom阅读 9,537评论 1 13
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,764评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,312评论 0 4

友情链接更多精彩内容