我正在使用ggtern绘制一个大型数据集的三元图(见下面的示例)。
在某种数据大小范围内,使用geom_density_tern()是完美的。由于我想可视化一个更复杂的数据集,加载所有数据并使用ggplot渲染已经不可能了(受限于内存)。我想也许可以通过分别计算kde2d矩阵的结果来绕过这个问题。但是我卡住了。我想知道是否有可能在ggtern中进行任何形式的解决?无论如何,我会添加一个数据结构和绘图的最小案例,这是我目前使用的。
require(ggplot2)
require(ggtern)
set.seed(1)
mydata <- data.frame(
x = runif(100, min = 0.25, max = 0.5),
y = runif(100, min = 0.1, max = 0.4),
z = runif(100, min = 0.5, max = 0.7))
plot <- ggtern() +
theme_bw() +
theme_hidetitles() +
geom_density_tern(data = mydata,
aes(x = x, y = y, z = z, alpha = ..level.. ),
size = 0.1, linetype = "solid", fill = "blue")+
geom_point(data = mydata,
aes(x = x, y = y, z = z), alpha = 0.8, size = 1)
plot
这些额外的行在三元配位系统中重新生成密度图:
library(MASS)
dataTern = transform_tern_to_cart(mydata$x,mydata$y,mydata$z)
dataTernDensity <- kde2d(x=dataTern$x, y=dataTern$y, lims = c(range(0,1), range(0,1)), n = 400)
image(dataTernDensity$x, dataTernDensity$y, dataTernDensity$z)
points(dataTern$x, dataTern$y, pch = 20, cex = 0.1)
segments(x0 = 0, y0 = 0, x1 = 0.5, y1 = 1, col= "white")
segments(x0 = 0, y0 = 0, x1 = 1, y1 = 0, col= "white")
segments(x0 = 0.5, y0 = 1, x1 = 1, y1 = 0, col= "white")
获取此图表:
提前感谢任何帮助!
kde2
,但在使用ggtern + geom_density_tern
时会出现内存不足的情况,是这样吗? - tonytonov