R语言绘制三元相图(ggtern包)

Python vs R:哪个更适合绘制三相元图?实测对比Python-ternary和ggtern包 本文深入对比了Python-ternary和ggtern两款三相元图绘制工具,从功能性、易用性、可视化效果和扩展性等方面进行全面评测。通过实际代码示例展示了两者在基础绘图、高级可视化及大数据处理上的差异,帮助数据科学家和研究人员根据项目需求选择最合适的工具。Python-ternary在大数据处理和定制化方面表现优异,而ggtern则在统计可视化和出版质量图表上更胜一筹。 阅读详情
AI摘要

本文详细介绍了如何使用R语言的ggtern包绘制三元相图,包括数据预处理、基本语法、添加点、核密度图、分组图、制图优化和各种元素的定制,适合理解变量权重和数据分析。

什么是三元相图?

三元相图是一种由三个组分构成,且三个组分的值之和恒为定值的图形,三元相图中点的位置表示三个组分间的比例关系,延申一下,可以表示三个变量的权重、相对重要性等。

三元相图的绘制

绘制工具

R语言我比较喜欢用ggplot2这个包来绘图,而ggplot2刚好有一个拓展包ggtern可以用来绘制三元相图,因此这次也是用这个ggtern包来小试牛刀。

基本语法

运用ggtern函数可以初始化一个三元相图出来

#data最好是dataframe格式
ggtern(data,aes(x,y,z))

数据预处理

构造数据最重要的是x,y,z三列,除此之外,可以有其他的分组字段,但这x、y、z三个字段是必须要有的!

# 读取数据
library(readxl)
data <- read_excel("D:/New Desktop/data.xlsx")
#打印数据前几行
head(data)

在这里插入图片描述

#构造数据
df <- data.frame(x = data$指标一,
                 y = data$指标二,
                 z = data$指标三,
                 city = data$城市,
                 value = data$Value,
                 year = data$年份)

在这里插入图片描述

初始化三元相图

运用刚刚讲的基础语法可以绘制出一个三元相图,但这个三元相图是没有任何内容的

#使用ggtern包生成三元相图
#首先,在ggtern函数里声明好数据和三相图的三个坐标轴x,y,z
p<- ggtern(data = df,aes(x, y, z))
p
给三元相图添加点

添加点的方法跟ggplot2包一样,这里就不做过多赘述,看下方代码。

p<- ggtern(data = df,aes(x, y, z))+
  geom_point(size=1.5) #size是指点对象的大小
p

在这里插入图片描述

添加核密度图

添加核密度图用的函数是stat_density_tern(),下面是这个函数在绘制过程中的使用:

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
        bdl.val = NA,
        aes(fill=..level..,alpha = ..level..))+
        geom_point(size=1.5)
p

在这里插入图片描述
添加完之后我们发现这个颜色有点辣眼睛,那不如修改一下核密度的颜色吧,这里用的方法是ggplot2里的颜色修改函数:scale_fill_gradient(low,high...)
具体使用看代码:

p <- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  geom_point(size =1.5)
p

在这里插入图片描述

制作分组图

制作分组图需要有一个用于分类的字段,那么下面我将根据city字段进行分组绘制
这里有几种分组图可以绘制:

  1. 根据颜色进行分组(colour = city)
  2. 根据大小进行分组(size = city)
  3. 根据点的样式进行分组(shape = city)

这里就不一一演示了,感兴趣的话可以替换一下代码里相应的部分

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #用city字段给点赋予不同的颜色
  geom_point(aes(colour = city))
p

在这里插入图片描述

制图优化

那么这幅图也就大致完成了,再来做些细节上的修改

  1. 轴标签的修改
  2. 图例的修改
  3. 添加数据标签
  4. 主题的添加
轴标签的修改

轴标签的修改用labs()函数来修改,其用法与ggplot里基本相同的,不仅可以修改标注,还可以在labs里添加标题

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
 #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works")+
  #用city字段给点赋予不同的颜色
  geom_point(size =1.5,aes(colour = city))
p

在这里插入图片描述

图例的修改

要修改图例,就需要先知道图例的来源,例如核密度图的色带图例是来源于scale_fill_gradient函数(因为它定义了密度的颜色),而点的图例来源于geom_point函数,这个函数是ggplot2里自带的,因此可以像ggplot2修改图例那样去修改这个点,而最后的那个图例实则是设置了透明度alpha所产生的。
知道了图例的来源,那么就对症下药,用的药是guides()函数。
注意:图例名称的修改在labs()里面。

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  #在labs里修改图例名称
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works",fill = "密度",color = "城市")+
  #设置透明度图例为不可见
  guides(alpha = "none")+
  #用city字段给点赋予不同的颜色
  geom_point(size =1.5,aes(colour = city))
p

在这里插入图片描述
那么如果我想将图例放在图的下方呢?
那么这个可以通过theme(legend.position)来控制:

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  #在labs里修改图例名称
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works",fill = "密度",color = "城市")+
  #设置透明度图例为不可见
  guides(alpha = "none")+
  #用city字段给点赋予不同的颜色
  geom_point(size =1.5,aes(colour = city))+
  theme(legend.position="bottom")
p

在这里插入图片描述

数据标签的添加

数据标签就是在图上显示具体的数据值,那么怎么在图上显示数据标签呢?
这里需要用到geom_label()函数,它的效果就像小卡片一样显示数值,具体看看代码吧!

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  #在labs里修改图例名称
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works",fill = "密度",color = "城市")+
  #设置透明度图例为不可见
  guides(alpha = "none",position="bottom")+
  #用city字段进行标注
  geom_label(aes(label = city))+
  #用city字段给点赋予不同的颜色
  geom_point(size =2,aes(colour = city))+
  theme(legend.position = "bottom",
        #将点图层背后灰色的背景去掉
        legend.key = element_rect(fill = NA))
p

在这里插入图片描述

主题添加

ggplot2跟ggtern中预设了一堆的主题可供我们选择,具体有以下的主题可以选择:
在这里插入图片描述
在这里插入图片描述

那么这里就挑选其中我最常使用的来展示:
theme_rgbw

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  #在labs里修改图例名称
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works",fill = "密度",color = "城市")+
  #设置透明度图例为不可见
  guides(alpha = "none",position="bottom")+
  #用city字段给点赋予不同的颜色
  #geom_label(aes(label = city))+
  geom_point(size =2,aes(colour = city))+
  theme(legend.position = "bottom",
         #将点图层背后灰色的背景去掉
        legend.key = element_rect(fill = NA))+
  #添加主题
  theme_rgbw()
p

在这里插入图片描述

字体的修改

ggplot2默认的字体是sans(Arial字体),那如果将这个这种字体修改成Times New Roman呢?
其实方法很简单,只需要在theme里面用text=element_text()函数来控制即可。
注意,ggplot2中serif字体就是Times New Roman

p<- ggtern(data = df,aes(x, y, z))+
   stat_density_tern(
        geom='polygon',
         bdl.val = NA,
        aes(fill=..level..,
            alpha = ..level..))+
  #修改核密度图的颜色
  scale_fill_gradient(low = "blue",
                      high = "red")+
  #修改坐标轴名称并且添加标题
  #在labs里修改图例名称
  labs(x ="Factor1",y = "Factor2",z = "Factor3",title = "This is my R works",fill = "密度",color = "城市")+
  #设置透明度图例为不可见
  guides(alpha = "none",position="bottom")+
  #用city字段给点赋予不同的颜色
  #geom_label(aes(label = city))+
  geom_point(size =2,aes(colour = city))+
  theme_rgbw()+
  theme(legend.position = "bottom",
         #将点图层背后灰色的背景去掉
        legend.key = element_rect(fill = NA)),
        #设置Times New Roman与字体大小
        text=element_text(size=16,  family="serif"))
p

在这里插入图片描述
上面就是我绘制三元相图的过程了,当然还有一些图形分面、图形保存的设置,这些都可以用ggplot2的方法去进行保存,这里就不重复造车轮子了,庆祝一下大功告成!

R语言ggtern进阶:三元相图数据归一化与均匀刻度绘制实战 本文详细介绍了如何使用R语言的ggtern包进行三元相图的数据归一化与均匀刻度绘制实战。通过药物协同效应分析案例,展示了如何解决刻度不均匀和绝对数值显示问题,并提供了特殊场景下的处理技巧,帮助科研人员高效可视化多组分数据。 阅读详情

相关推荐

R语言 ggtern 3.5.0 三元相图实战:5步实现化学组分数据可视化与核密度叠加

本文详细介绍了如何使用R语言的ggtern 3.5.0包绘制三元相图,并通过5个关键步骤实现化学组分数据可视化与核密度叠加。从环境准备、基础图形构建到核密度叠加技术和高级美化技巧,帮助科研人员快速掌握开源、可编程的三元相图绘制方法,适用于材料科学和化学工程领域的数据分析。

weixin_30729609的博客 336

R语言ggplot2 | 三元图

三元图,顾名思义,是一个等边三角形式的图像,它将本该是三维的x,y,z三轴转化为二维的三角形展示出来,三角形的三个角可以是一个或者一组样本,通过观察三角形中点的位置判断样本在三组间的分布状况。通常这类图用于展示组学数据(进行差异表达基因的分析),作为延伸,也可以用来分析微生物16S/ITS/18S扩增子宏基因组数据,并且可以结合火山图分析,探究微生物在三组样本间的富集状况。

R酷的数据科学笔记 1731

数据可视化进阶 | Python与R绘制三元相图(ternary plots)实战指南

本文提供了使用Python-ternary和R-ggtern绘制三元相图(ternary plots)的实战指南。针对三个组分总和固定的数据,文章详细对比了两种工具的核心哲学、适用场景,并通过手把手的代码示例,演示了从基础散点图到热力图、密度图等高级可视化的完整流程,帮助读者根据自身技术栈高效创建专业图表。

weixin_29081101的博客 442

R语言绘制三变量分区地图

其中,shape = 21表示将点的形状设置为圆环,fill = "transparent"表示圆环内部透明填充,color = "red"表示圆环的颜色为红色,stroke = 2表示圆环的线宽为2。aes是"aesthetic"的缩写,用于ggplot2包中的函数,用来映射数据到图形属性,例如颜色、形状、大小等。学习笔记:Ternary choropleth maps。还可以设置不同行之间的比例:(如第三行是第一行的3倍)(2)加载点矢量数据,并显示在地图上。(3)根据某变量大小显示点的大小。

qq_32649321的博客 1024

数据可视化进阶 | Python与R绘制三元相图(ternary plots)实战对比

本文对比了Python与R在绘制三元相图(ternary plots)方面的实战应用,详细介绍了Python-ternary和R-ggtern的使用方法及优化技巧。通过真实案例展示如何在地质学、化学等领域应用三元相图,帮助读者快速掌握数据可视化进阶技能。

weixin_29098367的博客 197

R语言:使用ggterm制作简单三元图

install.packages("ggtern")#安装ggtern包 library(ggtern)#加载包 library(ggplot2)#需要加载ggplot包 data(Feldspar)#加载示例数据集 head(Feldspar)#查看数据集 图为示例数据结构 #绘制图形 ggtern(data=Feldspar,aes(x=An,y=Ab,z=Or)) + geom_point() #图形美化 ggtern(F

Mrrunsen的博客 1122

origin三元相图_三元相图怎么看怎么画(附R代码示例)

什么是三元相图三元图是重心图的一种,它有三个变量,但需要三者总和为恒定值。在一个等边三角形坐标系中,图中某一点的位置代表三个变量间的比例关系。在群体遗传学中,它被称做Finetti图;在博弈论中,常被称为simplex图。在高通量测序分析领域中,最常用的是两组间的比较,展示的方式有火山图、曼哈顿图等,而三组互相两两比较需要展示三个图吗?就没有更好的展示方式了吗?三元图的引入解决了这一问题。近年来,...

weixin_39877050的博客 5035

ggtern:ggplot2的扩展,用于绘制三元图

ggtern ggplot2的扩展,用于创建三元图。 ggtern是一个软件包,它扩展了ggpot2的功能,从而能够为ggplot2原型几何图形(子集)绘制三元图。 有关更多示例和文档,请。

ggtern 与 vcd 包对比评测:绘制三元相图的 3 种方案与性能分析

本文对比评测了R语言中ggtern与vcd包在绘制三元相图时的三种方案与性能表现。详细分析了ggtern的ggplot2风格实现与vcd的轻量高效特性,提供了技术选型建议和优化策略,帮助用户在材料科学、化学工程等领域高效可视化三维数据。

weixin_34221036的博客 319

关于三元相图的软件

三元共晶相图模拟,有步冷曲线,等温截面图,平面投影图。

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

R语言|β 多样性分解以及三元相图的绘制

物种周转通常是生境过滤、竞争或历史事件影响的结果,而丰富度的差异则可能是由于物种自疏产生的群落嵌套性(Legendre, 2014)。将总beta多样性(β_total)分解为物种周转(β_turnover)和物种嵌套(β_nestedness),并以三元相图的形式展示,是在生态学beta多样性分析中常用的一种数据分析方法。在低版本的R中,ggtern包常常与ggplot包有冲突(我的就是),要注意。beta.sor: total beta(总beta)beta.sim:turnover(物种替换)

Zinnia_blog 940

Altium Designer许可证冲突?手把手教你用Windows防火墙彻底禁止AD联网(附详细截图)

本文详细介绍了如何通过Windows防火墙精准管控Altium Designer的网络权限,解决许可证冲突问题。通过配置入站和出站规则,彻底阻断AD的联网行为,提升软件运行效率。适用于需要稳定使用Altium Designer的工程师,附有详细截图和高级验证方法。

weixin_38170137的博客 423

ggtern vs vcd vs plotly:3种R语言三元相图方案性能与效果对比

本文深入对比了R语言中ggtern、vcd和plotly三种主流三元相图绘制工具的性能与效果。从语法结构、渲染性能到可视化效果,全面分析了各方案的优缺点,为化学、材料科学等领域的专业用户提供选型参考。ggtern继承ggplot2语法适合出版级图表,vcd以高效简洁见长,而plotly则擅长交互式可视化。

chouzu8463的博客 305

unity pc运行包导入glb

本文介绍了在Unity中实现GLB/GLTF模型动态导入的方法。主要使用glTFast插件进行模型导入,配合StandaloneFileBrowser实现文件选择功能。文章提供了详细的插件安装方式(包括国内镜像源),并给出了核心导入脚本代码。脚本实现了模型加载、父对象设置、材质修复等功能,解决了常见的材质显示异常问题。该方法支持编辑器和PC平台,兼容不同版本的glTFastAPI,通过简易UI操作即可完成模型导入,适合需要运行时加载3D模型的Unity项目开发。

懒懒的蓝的博客 545

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

R语言 ggtern 3.5.0 实战:5步绘制带核密度与分组的三元相图

本文详细介绍了如何使用R语言的ggtern 3.5.0包绘制带核密度与分组的三元相图,涵盖从数据预处理到高级可视化的全流程。通过5个步骤,读者可以掌握如何构建专业级的三元相图,包括核密度叠加、分组展示和主题优化,适用于科研数据可视化需求。

dbp5156的博客 348

虚拟机安装Centos8.5

Centos8.5

weixin_63604047的博客 959

跟着iMeta学做图|用三元图展示微生物种群相对丰度

本文代码已经上传至https://github.com/iMetaScience/iMetaPlot230125ternary 如果你使用本代码,请引用:Chenyuan Dang. 2022. Microorganisms as bio‐filters to mitigate greenhouse gas emissions from high‐altitude permafrost revea...

刘永鑫的博客——宏基因组公众号 2788

YOLOv11改进 | 损失函数篇 | YOLOv11引入引MPDIoU, GIoU,DIoU, CIoU, SIoU,EIoU, WIoU, LMPDIoU等损失函数

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~1. YOLOv11中添加MPDIoU, GIoU,DIoU, CIoU, SIoU等损失函数的方式。文件中用给出的代码替换掉。

tsg6698的博客 5280

8、对比 LightGBM、XGBoost 和深度学习

本文对比了LightGBM、XGBoost和深度学习模型(特别是TabTransformer)在处理表格数据时的性能差异。从模型复杂度、数据准备、训练时间、准确性和适用场景等方面进行分析,重点探讨了三者在人口普查收入预测任务中的表现。文章详细介绍了XGBoost与LightGBM的核心特性与区别,深入讲解了TabTransformer的架构与实现,并涵盖了分类特征编码、缺失值处理和类别不平衡等关键数据预处理技术,为选择合适的表格数据建模方法提供了实践指导。

julia4scientist的博客 120

扩增子图表解读7三元图:三组差异数量和关系

点击上方蓝色「宏基因组」关注我们!专业干货每日推送!背景介绍(Introduction)宏基因组学宏基因组学目前的主要研究方法包括:16S/ITS/18S扩增子、宏基因组、宏转录组和代谢...

刘永鑫的博客——宏基因组公众号 4567

【GameFramework框架内置模块】15、场景(Scene)

场景(Scene)模块,提供场景管理的功能,负责场景的加载、卸载、切换和管理。可以方便地管理不同场景之间的切换以及不同场景之间的信息传递。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1888

科研数据可视化:三元图原理与应用全解析

三元图(Ternary Plot)是一种基于三角形坐标系的多变量数据可视化技术,通过几何变换将三个总和恒定的变量映射到等边三角形区域。其核心原理是利用点到三边的垂直距离之和恒等于三角形高的特性,实现成分数据的空间编码。在工程实践中,三元图能有效解决传统二维图表难以展示的三元关系问题,广泛应用于材料科学(合金成分分析)、生态学(土壤组成研究)和社会科学(问卷调查可视化)等领域。借助Python的mpltern或R的ggtern等工具,科研人员可以高效实现包含多维数据叠加的期刊级图表输出,其中颜色映射和等值线技

weixin_30694389的博客 291

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

火山图 多个样本、_基因差异分析之火山图

差异基因(differential gene),是指一个基因在RNA水平处在不同环境压力、时间、空间等方面下,表达有显著性差异的基因。在不同因素下基因突变或者甲基化等结构发生改变导致差异的基因。常用的技术有DD-PCR、GENE-FISHING、GENE CHIP、高通量测序等,简单介绍如下:DDRT-PCR技术即mRNA差异显示聚合酶链式反应技术,此技术是以PCR技术和聚丙烯凝胶电泳技...

weixin_39614276的博客 5119

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python与R绘制三元图:从原理到Nature级复现

三元图作为可视化三个变量比例关系的特殊图表类型,其核心原理基于等边三角形的几何特性——任意点到三边的垂直距离之和恒定。这种坐标系统在材料科学和化学领域尤为重要,能够直观展示组分间的相互作用关系。从技术实现来看,需要先将三组分数据归一化后,通过三角函数转换为二维坐标。Python的matplotlib和R的ggtern包都提供了完整的解决方案,支持从基础绘图到出版级优化的全流程。特别是在学术图表复现场景中,通过调整字体规范、线宽设置和颜色方案,可以逼近Nature期刊的信息密度与视觉标准。数据预处理中的归一化

weixin_34126557的博客 187

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: R语言——ggplot2的绘图逻辑
下一篇: 高德poi获取之矩形搜索法(冲出900条限制)
Giser@lin
博客等级 码龄7年 4652粉丝 18原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值