如何在ggtern中使用原始数据中的轴范围和标签?

时间:2018-04-08 09:30:10

标签: r plot ggplot2 ggtern

我在R中使用ggtern制作三元图,并希望在我的ggtern图上有轴标签和断点,与原始数据相同。对于下面代码中生成的数据,每个轴的最大值将分别为12,10和4。

在上一篇文章之后,我尝试使用中断和标签来执行此操作,但每个轴仍然是0-1比例,缺少标签(由于它们超过1)并且带有标签的轴线不与图上的点相交。 (How to change labels of a ternary plot made by ggtern?

library(ggtern)
labFnc <- function(x,digits=2) format(round(unique(x),digits),digits=digits)

mydata <- data.frame(
  x = runif(50, min = 0.25, max = 12),
  y = runif(50, min = 0.1, max = 10),
  z = runif(50, min = 0.5, max = 4),
  value = runif(50, min = 10000, max = 20000))

ggtern(data = mydata,aes(x = x, y = y, z = z,col=value)) + 
  theme_bw() +
  geom_point(alpha = 0.8, size = 3) +
  theme_showarrows() +
  scale_T_continuous(breaks=unique(mydata$x),labels=labFnc(mydata$x))+ 
  scale_L_continuous(breaks=unique(mydata$y),labels=labFnc(mydata$y))+ 
  scale_R_continuous(breaks=unique(mydata$z),labels=labFnc(mydata$z))

enter image description here

有办法做到这一点吗?任何帮助将不胜感激。

编辑:我也尝试添加tern_limits参数。虽然这看起来按比例扩大了情节,但数据却处于错误的位置。我不能像以前一样加入我独特的休息时间。

ggtern(data = mydata,aes(x = x, y = y, z = z,col=value)) + 
  theme_bw() +
  geom_point(alpha = 0.8, size = 3) +
  theme_showarrows() +
  tern_limits(T=12, L=10, R=4)

enter image description here

1 个答案:

答案 0 :(得分:1)

您提供的解决方案是沿着正确的路径,但是,limit_term(...)函数(或别名)的所有参数都应该在[0,1]范围内,对应于[0,100%]。可以在此范围之外提供值,但是,这将用于解决包含大于100%且小于0%的值的限制。

总之,使用以下内容:

tern_limits(T=12, L=10, R=4)

实际上要求三元限制分别受到1200%,1000%和400%最大值的限制,这与您尝试的结果完全一致。

无论如何,以下是limits_ternzoom功能的一些示例。

library(ggtern)

n  = 100
df = data.frame(id=1:n,
                x=runif(n),
                y=runif(n),
                z=runif(n))
base = ggtern(df,aes(x,y,z,color=id)) + geom_point(size=3)
base

#Top Corner
base + limit_tern(1.0,0.5,0.5)

#Left Corner
base + limit_tern(0.5,1.0,0.5)

#Right Corner
base + limit_tern(0.5,0.5,1.0)

#Center Zoom Convenience Function
base + theme_zoom_center(0.4) # Zoom In
base + theme_zoom_center(0.6) # Zoom In
base + theme_zoom_center(0.8) # Zoom In
base + theme_zoom_center(1.0) ##Default as per no zoom
base + theme_zoom_center(1.2) # Zoom Out
base + theme_zoom_center(1.4) # Zoom Out
base + theme_zoom_center(1.6) # Zoom Out
base + theme_zoom_center(1.8) # Zoom Out
base + theme_zoom_center(2.0) # Zoom Out

#Left Zoom Convenience Function 
#   (try theme_zoom_R and theme_zoom_T for Right and Top respectively)
base + theme_zoom_L(0.4) # Zoom In
base + theme_zoom_L(0.6) # Zoom In
base + theme_zoom_L(0.8) # Zoom In
base + theme_zoom_L(1.0) ##Default as per no zoom
base + theme_zoom_L(1.2) # Zoom Out
base + theme_zoom_L(1.4) # Zoom Out
base + theme_zoom_L(1.6) # Zoom Out
base + theme_zoom_L(1.8) # Zoom Out
base + theme_zoom_L(2.0) # Zoom Out

注意:这些都是方便的功能,通过scale_X_continuous(...)[X = T,L,R]独立控制限制(有效),使缩放更容易。与x和y独立的纯笛卡尔坐标系不同,在三元系统中,限制必须有意义,以便三个顶点满足单形的条件。

如果必须独立控制每个轴,下面是一个示例,其中分别定义了T,L和R轴的每个极限,轴断裂和轴标签。如果限制在单纯形条件方面是荒谬的,则会引发错误。

ggtern() + 
  scale_T_continuous(limits=c(0.5,1.0),
                     breaks=seq(0,1,by=0.1),
                     labels=LETTERS[1:11]) + 
  scale_L_continuous(limits=c(0.0,0.5),
                     breaks=seq(0,1,by=0.1),
                     labels=LETTERS[1:11]) +
  scale_R_continuous(limits=c(0.0,0.5),
                     breaks=seq(0,1,by=0.1),
                     labels=LETTERS[1:11])