绘制三元图、颜色空间图:R语言代码
本文介绍基于R语言中的Ternary包,绘制三元图(Ternary Plot)的详细方法;其中,我们就以RGB三色分布图为例来具体介绍。
三元图可以从三个不同的角度反映数据的特征,因此在很多领域都得以广泛应用;如下图所示,就是一个最简单的三元图。其中,基于R语言中的Ternary包,我们可以非常方便地绘制三元图;本文就对其具体绘制方法加以介绍。

首先,由于我们需要用到R语言中的Ternary包,因此通过如下所示的代码配置Ternary包。
install.packages("Ternary")
Ternary包提供了两种绘制三元图的方法。首先,我们可以通过其提供的交互式界面,通过鼠标操作完成简单的三元图的绘制工作。我们可以通过如下所示的代码打开这一交互式界面。
Ternary::TernaryApp()
交互式界面打开后,如下图所示。我们可以按照其中各个按钮、参数的介绍,手动对三元图加以修改,并最终导出图像。

我们这里主要介绍基于代码的绘图方法,因此交互式界面就不再过多介绍了;大家如果有需要,可以对交互式界面绘图的方法加以自行尝试。
首先,通过代码绘制三元图,我们需要导入Ternary包。
library(Ternary)
最简单的三元图绘制方式,就是通过图下的代码,生成一个最基本的三元图。
TernaryPlot()
运行上述代码,将得到如下所示的图片。

当然,我们需要结合实际的需求,对这个简单的三元图加以个性化修改。首先,本文所用到的全部代码如下所示。
library(Ternary)
# dev.off()
TernaryPlot(alab = "Terrain \u2192", blab = "Vegetation \u2192", clab = "\u2190 Climate",
lab.col = c("red", "green", "blue"),
main = "Test Ternary Plot",
point = "up", lab.cex = 0.8, grid.minor.lines = 0,
grid.lty = "solid", col = rgb(0.9, 0.9, 0.9), grid.col = "white",
axis.col = rgb(0.6, 0.6, 0.6), ticks.col = rgb(0.6, 0.6, 0.6),
axis.rotate = FALSE,
padding = 0.08)
cols <- TernaryPointValues(rgb)
ColourTernary(cols, spectrum = NULL)
data_points <- list(
O = c(255, 128, 0),
Y = c(255, 255, 0),
P = c(255, 0, 255),
C = c(0, 255, 255)
)
AddToTernary(points, data_points, pch = 21, cex = 2.8,
bg = vapply(data_points,
function (x) rgb(x[1], x[2], x[3], 255, maxColorValue = 255),
character(1))
)
AddToTernary(text, data_points, names(data_points),cex = 0.8, font = 2)
legend("topright",
legend = c("Orange", "Yellow", "Purple", "Cyan"),
cex = 0.8, bty = "n", pch = 21, pt.cex = 1.8,
pt.bg = c(rgb(255, 128, 0, 255, NULL, 255),
rgb(255, 255, 0, 255, NULL, 255),
rgb(255, 0, 255, 255, NULL, 255),
rgb(0, 255, 255, 255, NULL, 255)),
)
运行上述代码,我们得到的最终结果图像如下图所示。

接下来,我们就对上述代码加以介绍与解释。这里需要注意,本文仅对我们用到的参数加以简单的介绍,其中很多参数的含义其实我也还没太搞清楚;大家在实际使用时,如果对参数还有其他疑惑,可以参考Ternary包的官方帮助文档:https://ms609.github.io/Ternary/reference/index.html 。
首先,代码中的第一部分,即TernaryPlot()函数,就是Ternary包绘制三元图的基本函数;我们通过修改其中各项参数,从而修改最终成图中各个部分的属性。其中,函数的第一行,也就是alab开头的这一行,表示三角形三条边分别要显示的字符,也就是“标注”;lab.col则表示三角形中三条边对应的坐标轴的文字标注,需要用什么颜色来表示;main表示三元图的标题;point表示三角形摆放的角度(例如我这里的"up"就表示将其中的一个角朝上放置);其后的两个参数lab.cex与grid.minor.lines,则分别表示坐标轴的标注的字号与三元图的最小单位格网线;由于我这里是做一张三角形分别表示R、G、B三种颜色的颜色空间图,因此就没有设置格网线。
随后,函数第五行的grid.lty表示三元图格网线的类型,其后的参数col表示三元图内部的绘制颜色,随后的参数grid.col表示格网线的颜色(当然我这里并没有设置格网线);接下来的参数axis.col表示三元图三条轴的颜色,参数ticks.col则表示三条轴上对应的标签(不是文字标注)的颜色;参数axis.rotate则表示是否要旋转标签;最后一个padding参数则用以控制图片的缩放。
接下来,由于我们希望通过R、G、B三种颜色的填充来实现三元图的着色,因此声明一个cols变量,并通过ColourTernary()函数将其填充到三元图中。
此外,为了方便大家看图,我们希望在这个三角形的R、G、B颜色空间图中,添加几个关键颜色的点,作为大家看图时的参考。因此,我们通过R、G、B值来确定几个颜色点,将其存储在data_point中;随后,通过AddToTernary()函数将其导入三元图中。
接下来,也就是代码中的最后一部分,我们通过legend()函数为图片添加图例。这里的图例,其实就是我们在前一步骤中,为图片添加的几个主要颜色点的图例。首先,函数的第一个参数"topright",表示我们希望将图例添加到图片的右上角;随后的几行参数,就是调整图例的字体、字号、要显示的内容等。
在通过调整代码,获得我们满意的三元图后,如果大家是用RStudio进行代码的撰写,可以在“Plots”中选择“Export”→“Save as Image...”选项,将图片导出;如下图所示。

不过这里需要注意,在RStudio中导出的图片往往清晰度不够高;如果大家希望提升图片的精度,可以选择导出.eps格式的图片素材;如下图所示。

随后,在Adobe Illustrator(AI)软件中打开刚刚保存的.eps格式文件;此时,不仅可以直接对图片加以进一步修改,还可以用图片格式保存更高精度的图片。

至此,大功告成。
绘制三元图、颜色空间图:R语言代码的更多相关文章
- 机器学习十大算法总览(含Python3.X和R语言代码)
引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...
- 统计学习导论之R语言应用(三):线性回归R语言代码实战
统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...
- 最棒的7种R语言数据可视化
最棒的7种R语言数据可视化 随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在 ...
- R语言绘制相对性关系图
准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...
- [R语言] 基于R语言实现树形图的绘制
树状图(或树形图)是一种网络结构.它由一个根节点组成,根节点产生由边或分支连接的多个节点.层次结构的最后一个节点称为叶.本文主要基于R语言实现树形图的绘制.关于python实现树形图的绘制见:基于ma ...
- 决策树ID3原理及R语言python代码实现(西瓜书)
决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...
- 第五篇:R语言数据可视化之散点图
散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 绘制基本散点图 本例选用如下测试数据集: 绘制 ...
- R语言 ggplot2包
R语言 ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...
- 手把手教你学习R语言
本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开始,如何进行,选择什么学习资源.虽然网络上有许多不错的免费学习资源,然而它们多过了头,反 ...
- 统计学习导论之R语言应用(二):R语言基础
统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...
随机推荐
- NC21125 践踏
题目链接 题目 题目描述 首先给定一个定值k,支持如下操作(在数轴上) 加入一条线段[l,r] 删除一条已经存在的线段 给定x,问有多少个区间包含x+kt,其中t是一个整数变量,即t ∈ Z 比如说当 ...
- Kafdrop
Kafdrop 是一个用于查看 Kafka 主题和浏览消费者组的 Web UI docker run -d --rm -p 9000:9000 \ -e KAFKA_BROKERCONNECT=hos ...
- 基于Android的“哲学家就餐问题”防死锁的设计与实现
1问题描述 如图1.1,有5个哲学家围着一个大圆桌就餐.哲学家和筷子都按逆时针顺序编号,每个哲学家的编号与他左边的筷子的编号一致. 规定如下: (1)哲学家之间不相互交流: (2)哲学家只做两件事:吃 ...
- spring boot实现邮箱验证码注册
最近在设计自己的博客系统,涉及到用户注册与登录验证. 注册这地方我先采用最传统的邮箱验证码方式.具体的实现方式如下: 1.有关如何配置spring boot发送邮件,请参考我的另一篇文章: https ...
- sentry-native 在 windows 平台上搭建
官方文档:https://github.com/getsentry/sentry-native 虽说官方文档有搭建步骤,奈何我用 git bash 试了 n 遍,最终都会报一大堆错误,白白浪费了我快一 ...
- Ubuntu常用工具和问题整理
安装Ubuntu虚拟机时常会遇到的几个问题 1.安装时设置镜像 安装Ubuntu系统时设置国内镜像可以加快安装速度:http://mirrors.aliyun.com/ubuntu/ 参考:ubunt ...
- 【架构师视角系列】QConfig配置中心系列之Client端(二)
目录 声明 配置中心系列文章 一.架构 一.客户端架 1.Server 职责 (1)配置管理 (2)配置发布 (3)配置读取 2.Client 职责 (1)配置拉取 (2)配置注入 (3)配置变更监听 ...
- eclipse c++ 安装
eclipse及其插件安装 对于我这种被VS惯坏了的人来说,make file 非常不友好的,最近要在redhat 下面去编译c++动态库和应用程序,原有的工程是在window下面的,要到linux下 ...
- 【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
问题描述 在Azure Redis的导出页面,突然不能配置Storage Account的SAS作为授权方式. 那么是否可以通过AZ CLI或者是Powershell来实现SAS的配置呢? 问题解答 ...
- Java 属性赋值的先后顺序
1 package com.bytezero.circle; 2 /** 3 * 4 * @Description 5 * @author Bytezero·zhenglei! Email:42049 ...