gpt4 book ai didi

R ggplot2 stat_density2d 网格

转载 作者:行者123 更新时间:2023-12-04 14:59:36 27 4
gpt4 key购买 nike

在 R、ggplot2 中,如何更改 stat_density2d 中使用的网格几何对象受三角形区域约束?

我正在绘制不是标准 ggplot2 类型的三元图,轮廓在轴上溢出。实际三元图的代码相当冗长,但本质上,我需要将等高线约束为等边三角形。

以下是重现该问题的示例代码:

library(ggplot2)

triangle <- data.frame(x=c(0,.5,1),y=c(0,1,0))
dummy <- data.frame(x=c(0.25,0.50,0.75),y=c(0.25,0.75,0.25))

p <- ggplot() + geom_polygon(data=triangle,aes(x,y),fill="transparent",color="black",size=1)
p <- p + geom_point(data=dummy,aes(x,y))
p <- p + stat_density2d(data=dummy,aes(x,y)) + theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(), axis.ticks = element_blank(),
axis.text.x = element_blank(), axis.text.y = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
p

Sample

我相信这是由于网格与绘图区域的原始笛卡尔坐标边界相关联,为了演示,请考虑以下代码:
library(ggplot2)

triangle <- data.frame(x=c(0,.5,1),y=c(0,1,0))
dummy <- data.frame(x=c(0.25,0.50,0.75),y=c(0.25,0.75,0.25))

p <- ggplot() + geom_polygon(data=triangle,aes(x,y),fill="transparent",color="black",size=1)
p <- p + geom_point(data=dummy,aes(x,y))
p <- p + stat_density2d(data=dummy,aes(x,y),geom='tile',contour=F,fill="transparent",color="magenta") + theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(), axis.ticks = element_blank(),
axis.text.x = element_blank(), axis.text.y = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
p

产生以下结果:

Sample2

那么如何更改网格以受三角形约束。而不是原始笛卡尔绘图边界?

最佳答案

自发布ggtern包,这是现在可以使用以下简单代码实现的结果:

#load the library
library(ggtern)

#Create dummy data
df <- data.frame(T=c(.8,.1,.1),
L=c(.1,.8,.1),
R=c(.1,.1,.8))

#Now plot the diagram
ggtern(data=df,aes(y=T,x=L,z=R)) + geom_point() + geom_density2d() + theme_bw()

enter image description here

关于R ggplot2 stat_density2d 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com