制作三元图、色彩空间图: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
格局文件;此刻,不只能够直接对图片加以进一步修正,还能够用图片格局保存更高精度的图片。
至此,功德圆满。