绘制三元图、颜色空间图:R语言代码

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

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

首先,由于我们需要用到R 语言中的Ternary包,因此通过如下所示的代码配置Ternary包。

r 复制代码
install.packages("Ternary")

Ternary包提供了两种绘制三元图的方法。首先,我们可以通过其提供的交互式界面,通过鼠标操作完成简单的三元图的绘制工作。我们可以通过如下所示的代码打开这一交互式界面。

r 复制代码
Ternary::TernaryApp()

交互式界面打开后,如下图所示。我们可以按照其中各个按钮、参数的介绍,手动对三元图加以修改,并最终导出图像。

我们这里主要介绍基于代码的绘图方法,因此交互式界面就不再过多介绍了;大家如果有需要,可以对交互式界面绘图的方法加以自行尝试。

首先,通过代码绘制三元图,我们需要导入Ternary包。

r 复制代码
library(Ternary)

最简单的三元图绘制方式,就是通过图下的代码,生成一个最基本的三元图。

r 复制代码
TernaryPlot()

运行上述代码,将得到如下所示的图片。

当然,我们需要结合实际的需求,对这个简单的三元图加以个性化修改。首先,本文所用到的全部代码如下所示。

r 复制代码
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格式文件;此时,不仅可以直接对图片加以进一步修改,还可以用图片格式保存更高精度的图片。

至此,大功告成。

相关推荐
生物信息与育种5 小时前
实战总结:用 rMVP 做植物 GWAS 的标准工作流与避坑指南
人工智能·深度学习·职场和发展·数据分析·r语言
知识分享小能手10 小时前
R语言入门学习教程,从入门到精通,初识R语言(1)
开发语言·学习·r语言
知识分享小能手1 天前
R语言入门学习教程,从入门到精通,R语言多维数据可视化(12)
学习·信息可视化·r语言
知识分享小能手2 天前
R语言入门学习教程,从入门到精通,R语言时间序列数据可视化(11)
学习·信息可视化·r语言
maizeman1262 天前
R语言——折线图与面积图
信息可视化·r语言·折线图·面积图·堆积面积图
知识分享小能手3 天前
R语言入门学习教程,从入门到精通,R语言局部整体型数据可视化(10)
学习·信息可视化·r语言
知识分享小能手4 天前
R语言入门学习教程,从入门到精通,R语言数据计算与分组统计(9)
开发语言·学习·r语言
知识分享小能手5 天前
R语言入门学习教程,从入门到精通,R语言网络关系数据可视化(8)
学习·信息可视化·r语言
l1t6 天前
类似 X-13ARIMA-SEATS 功能的 JDemetra+ 安装和使用
java·数据库·r语言
知识分享小能手6 天前
R语言入门学习教程,从入门到精通,R语言层次关系数据可视化(7)
学习·信息可视化·r语言