- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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")
最佳答案
我们可以使用 Stat 中通常在幕后使用的代码来解决这个问题。刚刚发布 ggtern 2.0.1
,几天前在 CRAN 上发布,完全重写了包以兼容 ggplot2 2.0.0
,我熟悉一种可能适合您需求的方法。顺便提一下,为了您的兴趣,ggtern 2.0.X
中的新功能摘要可以找到 here :
请在下面找到您的问题的解决方案和工作代码,这是在等距对数比空间上计算的密度估计。
#Required Libraries
library(ggtern)
library(ggplot2)
library(compositions)
library(MASS)
library(scales)
set.seed(1) #For Reproduceability
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))
#VARIABLES
nlevels = 7
npoints = 200
expand = 0.5
#Prepare the data, put on isometric logratio basis
df = data.frame(acomp(mydata)); colnames(df) = colnames(mydata)
data = data.frame(ilr(df)); colnames(data) = c('x','y')
#Prepare the Density Estimate Data
h.est = c(MASS::bandwidth.nrd(data$x), MASS::bandwidth.nrd(data$y))
lims = c(expand_range(range(data$x),expand),expand_range(range(data$y),expand))
dens = MASS::kde2d(data$x,data$y,h=h.est,n=npoints,lims=lims)
#-------------------------------------------------------------
#<<<<< Presumably OP has data at this point,
# and so the following should achieve solution
#-------------------------------------------------------------
#Generate the contours via ggplot2's non-exported function
lines = ggplot2:::contour_lines(data.frame(expand.grid(x = dens$x, y = dens$y),
z=as.vector(dens$z),group=1),
breaks=pretty(dens$z,n=nlevels))
#Transform back to ternary space
lines[,names(mydata)] = data.frame(ilrInv(lines[,names(data)]))
#Render the plot
ggtern(data=lines,aes(x,y,z)) +
theme_dark() +
theme_legend_position('topleft') +
geom_polygon(aes(group=group,fill=level),colour='grey50') +
scale_fill_gradient(low='green',high='red') +
labs(fill = "Density",
title = "Example Manual Contours from Density Estimate Data")
关于r - 在 ggtern 中绘制 kde 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810857/
一个简单的 - 可能是基本的 - 我无法找到答案的问题:如何更改/管理 ggtern 中的轴宽度/厚度?看起来不适用于 ggtern 的常用命令帮助将不胜感激提前致谢拉斯 最佳答案 这是由 ggter
我正在尝试使用库 ggtern 创建一个三元轮廓填充图。使用的代码是 a <- c(0.50, 0.625, 0.375, 0.25, 0.5625, 0.125, 0.25, 0.3125, 0.3
对于 ggplot2,我通常希望能够像这样添加一个数据点, ggtern(df, aes(X, Y, Z, value = VALUE), aes(x, y, z)) + geom_p
ggtern 中是否有通过每个连续点之间的直线连接观察结果的方法?我的代码是: require(ggtern) x <- data.frame( A = c( 0, 0, 1, 0
三元图如下图所示。我想使用 R 中的 ggtern 包添加 Z=60、Z=90 和 Y=60 的标签。 R代码链接是the R code of ternary diagram 最佳答案 这不是完美的答
我正在 R 中使用 ggtern 来制作三元图,并且希望在我的 ggtern 图上有轴标签和中断,与原始数据相同。对于下面代码中生成的数据,每个轴的最大值将为 12、10 和 4。 在上一篇文章之后,
尝试将主题切换为 theme_bw() 无效,theme_grey() 似乎优先。有什么想法吗? ggplot(data=mpg,aes(y=year,x=cyl)) + geom_point() +
我注意到,自从 ggplot2 发布了他们的新版本 (3.3.0),我不能再使用包 ggtern,因为它完全破坏了我用 ggplot2 生成的所有图。 library(ggplot2) df <- d
我有一个问题 geom_hex_tern与单个图完美配合,但是当我制作刻面时,十六进制 bin 的大小和形状会变形。 library(tidyverse) library(ggtern) # My d
我正在使用 ggtern 以三级图的形式绘制大型数据集(参见下面的示例)。 直到某个数据大小,一切都很完美,因为我使用的是 geom_density_tern()。因为我想可视化一个更复杂的数据集,加
如何使用选定的填充红色/蓝色和黑色轮廓为 A 和 D 着色。检查我的 以查看我尝试过的内容。谢谢! obs <- c("Gene1", "Gene2", "Gene3", "Gene4","Gene5
我正在尝试使用 ggtern包来绘制一些图。它曾经在 ggplot2 上运行,但现在不起作用并破坏了 ggplot2。 当我运行以下命令时: library(ggplot2) qplot(1,2) l
Polynators 凸包面积 考虑以下数据框 DGChi <- structure(list(Sucrose = c(42, 40, 15, 19, 33, 49, 35, 31, 22, 25,
我目前正在研究蒸发实验的可视化。我用 ggtern 和基于 phreeqc 模拟 的数据绘制了三元相图 (NaCl-Na2SO4-H2O)。相边界(红色/蓝色)是平滑的数据点 (geom_smooth
在下面的三元图中,轴外的标签被剪掉了。我找不到避免这种情况的 ggtern() 或 ggplot2 设置。对于基础 R 图形,我只使用 xpd=TRUE。 我的数据: modes <- structu
我是一名优秀的程序员,十分优秀!