在R中的ggtern图上绘制两条路径

时间:2015-10-28 13:39:01

标签: r plot ggplot2

在R的ggtern包中,我试图在同一个ternery情节上绘制两条不同颜色的路径,并且只标记它们的起点,有人可以告诉我如何做到这一点,我可以在单个地块上获得路径,但不是在同一个,这是我的例子: 要求(ggtern)

require(ggtern)    
x  <- data.frame(
      A = c( 0, 0, 1, 0.1), 
      B = c( 0, 1, 0, 0.3) ,
      C = c( 1, 0, 0, 0.6)
    )

    yy<-data.frame(
      D= c(0.6, 0.2,0.8,0.33 ),
      E= c(0.2, 0.8, 0.1,0.33),
      F= c(0.2, 0.0, 0.1,0.33)   
        )

    ggtern(data=x,aes(A,B,C)) + 
      geom_path(color="red")+
      geom_point(type="l",shape=21,size=2) +
      geom_text(label="", color="blue")+
      theme_classic() 

    ggtern(data=yy,aes(D,E,F)) + 
      geom_path(color="blue")+
      geom_point(type="l",shape=21,size=1) +
      theme_classic() 

1 个答案:

答案 0 :(得分:1)

在这里,我提供了一个问题的答案,同时也借此机会演示了ggtern 2.0.1的一些附加功能,这些功能是在几天前完全重新编写包兼容后在CRAN上发布的与ggplot2 2.0.0。可以在ggtern 2.0.X找到ggtern中新功能的摘要:

Eric Fail说正确的最佳解决方案要求将数据组合成单个数据帧,并将路径分组或映射到不同的颜色变量,以便区分它们。另一种方法是创建两(2)个路径图层,并将局部数据框传递给每个几何图形,而不是使用传递给geom_label(...)构造函数的全局数据框。

在下面的解决方案中,我合并了数据,创建了一个'Series'变量(随后映射到颜色),然后使用新版{{1}附带的新ggplot2几何}}。由于一些点位于周边(并且标签延伸到周边之外),我还在图层下面应用了手动剪切蒙版,这会抑制ggterns自动剪裁蒙版 - 通常在前景中渲染。为了演示的目的,我还应用了theme_rotate(...)便利函数,并利用limit_tern(...)便利函数将轴的范围扩展到[0,1]的标准范围之外。最后,为游行箭头创建了新标签,这些标签与顶点标签不同。

here

可以使用以下代码生成上述解决方案:

require(ggtern)    
df.A <- data.frame(
  A = c( 0, 0, 1, 0.1), 
  B = c( 0, 1, 0, 0.3) ,
  C = c( 1, 0, 0, 0.6)
)

df.B <-data.frame(
  A= c(0.6, 0.2,0.8,0.33 ),
  B= c(0.2, 0.8, 0.1,0.33),
  C= c(0.2, 0.0, 0.1,0.33)   
)

df = rbind(data.frame(df.A,Series='A'),
           data.frame(df.B,Series='B'))
df$Label = 1:nrow(df)

ggtern(data=df,aes(A,B,C,colour=Series)) +
  theme_dark() + 
  theme_legend_position('topleft') +
  theme_showarrows() + custom_percent('%') + 
  theme_rotate(60) + 
  geom_mask() +
  geom_path(size=1) +
  geom_label(aes(label=Label),show.legend = F) + 
  limit_tern(1.1,1.1,1.1) + 
  labs(title  ="Example Combined Paths",
       Tarrow = "Value B",
       Larrow = "Value A",
       Rarrow = "Value C")