码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 绘制三元图、颜色空间图:R语言代码


    合集 - 学术工作效率(34)
    1.安装Amos结构方程模型分析软件的方法2023-04-282.如何不显示我的电脑、回收站等图标?2023-05-053.SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数2023-05-084.无需代码绘制人工神经网络ANN模型结构图的方法2023-05-105.论文的技术路线流程图如何绘制?2023-05-196.电脑缩放异常、显示亮度无法调整的处理办法2023-06-067.EndNote参考文献格式Output Styles界面介绍2023-06-088.Windows电脑环境变量(用户变量、系统变量)的修改2023-07-139.如何修改电脑的BIOS密码?2023-07-2210.叶绿素含量测定仪SPAD-502怎么使用?2023-07-2911.全球都有哪些高光谱遥感卫星?2023-08-1912.创建Anaconda虚拟Python环境的方法2023-09-0913.Anaconda虚拟环境配置Python库与Spyder编译器2023-10-1414.小提琴图的绘制方法:Python matplotlib实现2023-10-1615.如何用CAN-EYE获取植被参数数据?2023-10-2216.ArcMap属性表出现乱码情况的解决2023-10-2717.考研保研、夏令营推免的简历模板2023-12-1518.安装MicroStation软件、Terrasolid插件的方法01-2219.VMware虚拟机部署Linux Ubuntu系统的方法01-2420.在Linux Ubuntu系统中部署C++环境与Visual Studio Code软件01-2621.安装Visual Studio的详细流程01-2822.获取Visual Studio所用MSVC编译器版本:_MSC_VER数值01-2923.Visual Studio部署C++矩阵库Armadillo的方法01-3024.如何在Visual Studio新C++项目中调用之前配置过的库?01-3125.在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)02-0126.C++遴选出特定类型的文件或文件名符合要求的文件02-0227.初步上手Git软件及GitHub平台:基本操作方法02-0528.下载、安装Git并拷贝GitHub项目到本地的流程02-0629.Visual Studio部署matplotlib绘图库的C++版本02-0730.Anaconda与Python环境在Windows中的部署03-0131.Windows配置R语言、RStudio开发环境03-0332.Visual Studio部署C++环境下OpenCV库03-0633.ArcMap的mxd文件没有数据、显示感叹号怎么办?03-22
    34.绘制三元图、颜色空间图:R语言代码03-27
    收起

      本文介绍基于R语言中的Ternary包,绘制三元图(Ternary Plot)的详细方法;其中,我们就以RGB三色分布图为例来具体介绍。

      三元图可以从三个不同的角度反映数据的特征,因此在很多领域都得以广泛应用;如下图所示,就是一个最简单的三元图。其中,基于R语言中的Ternary包,我们可以非常方便地绘制三元图;本文就对其具体绘制方法加以介绍。

    image

      首先,由于我们需要用到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格式文件;此时,不仅可以直接对图片加以进一步修改,还可以用图片格式保存更高精度的图片。

      至此,大功告成。

  • 相关阅读:
    【英语:基础高阶_经典外刊阅读】L3.长句子扒皮—如何快速寻找主干
    基于Vue+ElementUI+Springboot劳动仲裁法院纠纷调解系统
    《七月集训》第一日——数组
    划水日常(16.5)关于出版图书有偿征集书名 ~
    qsv加速滤镜
    Java抽象类和接口
    一站式数字藏品收款系统开发解决方案
    【日常训练】871. 最低加油次数
    力扣刷题学习SQL篇——1-7 查询(修复表中的名字——利用字符串函数)
    2024.06.11校招 实习 内推 面经
  • 原文地址:https://www.cnblogs.com/fkxxgis/p/18098190
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号