2017-08-22 1 views
3

Das Ternärdiagramm ist in der folgenden Abbildung dargestellt. Ich mag die Etiketten von Z hinzuzufügen = 60, Z = 90 und Y = 60 mit ggtern Paket in R.Wie fügt man Beschriftungen auf der Achse im ternären Diagramm mit ggtern Paket hinzu?

Der R Code-Link ist the R code of ternary diagram

ternary diagram

+0

Ich habe eine neue Geometrie in th hinzugefügt Die neueste Version, um diese Art von Sache ein wenig einfacher zu machen, check out: geom_text_viewport und geom_label_viewport, http://www.ggtern.com/2017/07/23/version-2-2-1-released/. Sie müssen die Maske weiterhin unterdrücken oder unter den Textebenen platzieren, aber diese beiden Geometrien sind intuitiver, wenn Sie die Beschriftungen relativ zu den kartesischen [0,1] -Obergrenzen des Ansichtsfensters platzieren. –

Antwort

2

Dies ist nicht die perfekte Antwort, aber ich versuchte, Ihr gewünschtes Ergebnis mit annotate wie folgt zu erreichen:

ggtern(data=DATA,aes(x,y,z)) + 
    geom_polygon(aes(fill=Series),alpha=.5,color="black",size=0.25) + 
    scale_fill_manual(values=as.character(unique(DATA$Series))) + 
    theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
    labs(fill="Region",title="Sample Filled Regions") + 
    annotate(geom = 'text', 
      x  = c(0.1, 1/3, 0.0), 
      y  = c(0.0, 0.0, 1.5), 
      z  = c(0.5, 1/3, 1.0), 
      angle = c(0, 0, 0), 
      vjust = c(2.5, 2.5, -1.5), 
      hjust = c(0.0, -0.2, 0.0), 
      label = c("Z=90","Z=60","Y=60"), 
      color = c("black","gray",'orange')) + # for inspection 
    theme_nomask() # allows drawing beyond the borders 

Daraus ergibt sich folgendes Bild:

enter image description here

2

Eine eher "raw" Lösung mit grobs arbeiten.
Nachdem wir die Text-Grobs gefunden haben, die die x-, y- und z-Beschriftungen enthalten (ursprünglich am Scheitelpunkt des Dreiecks platziert), verschieben wir jede Beschriftung an die gewünschte Position.

library(ggtern) 
library(grid) 
g <- data.frame(y=c(1,0,0), 
       x=c(0,1,.4), 
       z=c(0,0,.6),   Series="Green") 
p <- data.frame(y=c(1,0.475,0.6), 
       x=c(0,0.210,0), 
       z=c(0,0.315,.4),   Series="Red") 
q <- data.frame(y=c(0.575,0.475,0.0,0.0), 
       x=c(0.040,0.210,0.4,0.1), 
       z=c(0.385,0.315,0.6,0.9),   Series="Yellow") 
f <- data.frame(y=c(0.6,0.575,0.0,0.0), 
       x=c(0.0,0.040,0.1,0.0), 
       z=c(0.4,0.385,0.9,1.0),   Series="Blue") 
DATA = rbind(g, p, q, f) 

p <- ggtern(data=DATA,aes(x,y,z)) + 
    geom_polygon(aes(fill=Series),alpha=.5,color="black",size=0.25) + 
    scale_fill_manual(values=as.character(unique(DATA$Series))) + 
    theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
    labs(fill="Region",title="Sample Filled Regions")+ 
    xlab("X=60")+ylab("Y=60")+zlab("Z=90") 

gt <- ggplot_gtable(ggplot_build(p)) 
grobPanel <- gt$grobs[[which(gt$layout$name == "panel")]] 
grobLabels <- grobPanel$children[[length(grobPanel$children)]] 

# X-axes label 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[2]]$x <- unit(0.6,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[2]]$y <- unit(0.1,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[2]]$gp$fontsize <- 14 

# Y-axes label 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[1]]$x <- unit(0.7,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[1]]$y <- unit(0.6,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[1]]$gp$fontsize <- 14 

# Z-axes label 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[3]]$x <- unit(0.75,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[3]]$y <- unit(0.1,"npc") 
gt$grobs[[which(gt$layout$name == "panel")]]$children[[length(grobPanel$children)]]$children[[3]]$gp$fontsize <- 14 

grid.draw(gt) 

enter image description here

Verwandte Themen