在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()
答案 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]
的标准范围之外。最后,为游行箭头创建了新标签,这些标签与顶点标签不同。
可以使用以下代码生成上述解决方案:
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")