本文介绍基于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.cexgrid.minor.lines,则分别表示坐标轴的标注的字号与三元图的最小单位格网线;由于我这里是做一张三角形分别表示RGB三种颜色的颜色空间图,因此就没有设置格网线。

  随后,函数第五行的grid.lty表示三元图格网线的类型,其后的参数col表示三元图内部的绘制颜色,随后的参数grid.col表示格网线的颜色(当然我这里并没有设置格网线);接下来的参数axis.col表示三元图三条轴的颜色,参数ticks.col则表示三条轴上对应的标签(不是文字标注)的颜色;参数axis.rotate则表示是否要旋转标签;最后一个padding参数则用以控制图片的缩放

  接下来,由于我们希望通过RGB三种颜色的填充来实现三元图的着色,因此声明一个cols变量,并通过ColourTernary()函数将其填充到三元图中。

  此外,为了方便大家看图,我们希望在这个三角形的RGB颜色空间图中,添加几个关键颜色的点,作为大家看图时的参考。因此,我们通过RGB值来确定几个颜色点,将其存储在data_point中;随后,通过AddToTernary()函数将其导入三元图中。

  接下来,也就是代码中的最后一部分,我们通过legend()函数为图片添加图例。这里的图例,其实就是我们在前一步骤中,为图片添加的几个主要颜色点的图例。首先,函数的第一个参数"topright",表示我们希望将图例添加到图片的右上角;随后的几行参数,就是调整图例的字体、字号、要显示的内容等。

  在通过调整代码,获得我们满意的三元图后,如果大家是用RStudio进行代码的撰写,可以在“Plots”中选择“Export”→“Save as Image...”选项,将图片导出;如下图所示。

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

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

  至此,大功告成。

绘制三元图、颜色空间图:R语言代码的更多相关文章

  1. 机器学习十大算法总览(含Python3.X和R语言代码)

    引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...

  2. 统计学习导论之R语言应用(三):线性回归R语言代码实战

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

  3. 最棒的7种R语言数据可视化

    最棒的7种R语言数据可视化 随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在 ...

  4. R语言绘制相对性关系图

    准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...

  5. [R语言] 基于R语言实现树形图的绘制

    树状图(或树形图)是一种网络结构.它由一个根节点组成,根节点产生由边或分支连接的多个节点.层次结构的最后一个节点称为叶.本文主要基于R语言实现树形图的绘制.关于python实现树形图的绘制见:基于ma ...

  6. 决策树ID3原理及R语言python代码实现(西瓜书)

    决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...

  7. 第五篇:R语言数据可视化之散点图

    散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 绘制基本散点图 本例选用如下测试数据集: 绘制 ...

  8. R语言 ggplot2包

    R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...

  9. 手把手教你学习R语言

    本文为带大家了解R语言以及分段式的步骤教程! 人们学习R语言时普遍存在缺乏系统学习方法的问题.学习者不知道从哪开始,如何进行,选择什么学习资源.虽然网络上有许多不错的免费学习资源,然而它们多过了头,反 ...

  10. 统计学习导论之R语言应用(二):R语言基础

    统计学习导论(ISLR) 参考资料 The Elements of Statistical Learning An Introduction to Statistical Learning 统计学习导 ...

随机推荐

  1. RDM6300 125KHz ID卡读卡器

    RDM6300 RDM6300是一个针对125KHz ID卡的读卡模块, 用于读取EM4100兼容ID卡信息, 由一片C8051F330和一片LM358D双运放组成 注: EM4100, 4200卡是 ...

  2. 【Unity3D】UI Toolkit自定义元素

    1 前言 ​ UI Toolkit 支持通过继承 VisualElement 实现自定义元素,便于通过脚本控制元素.另外,UI Toolkit 也支持将一个容器及其所有子元素作为一个模板,便于通过脚本 ...

  3. Java集合框架学习(四) LinkedHashSet详解

    LinkedHashSet介绍 前面我们介绍了HashSet和TreeSet. LinkedHashSet也是Set接口的一个实现类,同时还继承了HashSet public class Linked ...

  4. Vmware中Linux通过NAT设置静态IP实现上网

    1.设置虚拟机上网方式为NAT 2.修改centos网络配置文件,我的是centos7.4,主要网关不能和主机设置的一致 [root@dylan-centos ~]# vi /etc/sysconfi ...

  5. git回退至指定版本,并更新远程仓库

    1. git log   查到commit记录 2.复制 commit 后面的id 3. git reset --hard  commit 后面的id   // 回退 4. 强制更新远程仓库  git ...

  6. drf中认证源码流程

    drf中认证流程 首先通过导入from rest_framework.views import APIView,然后通过ctrl+鼠标右键进入到APIView类中,apiview中定义了许多方法,我们 ...

  7. 适配http分发Directory.Build.props文件,需要替换默认的微软sdk:8.0映像

    背景 我们是把Directory.Build.props及其Import的文件,都放在http://dev.amihome.cn 那么docker build的时候,也是需要下载Directory.B ...

  8. Java 抽象类的应用:模板方法的设计模式

    1 package com.bytezreo.template; 2 3 /** 4 * 5 * @Description 抽象类的应用:模板方法的设计模式 6 * @author Bytezero· ...

  9. Java 求数值型数组中的最大元素 最小值 平均值 总和等 要求:随机数是 两位数

    1 /* 2 * 3 * 算法考查:求数值型数组中的最大元素 最小值 平均值 总和等 4 * 要求:随机数是 两位数 5 * [10,99] 6 * 公式:(int)(Math.random()*(9 ...

  10. roadmap - json格式的 思维导图

    roadmap - json格式的 思维导图 前端路线图 http://www.bitcountrys.com/frontend.html https://gitee.com/ironman1987/ ...