Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ggtern软件包在三元图的轴上添加标签?_R_Ggplot2_Data Visualization_Data Analysis_Ggtern - Fatal编程技术网

如何使用ggtern软件包在三元图的轴上添加标签?

如何使用ggtern软件包在三元图的轴上添加标签?,r,ggplot2,data-visualization,data-analysis,ggtern,R,Ggplot2,Data Visualization,Data Analysis,Ggtern,三元图如下图所示。我想使用R中的ggtern包添加Z=60、Z=90和Y=60的标签 R代码链接是 一个相当“原始”的解决方案是与Grob合作。 在找到包含x、y和z标签(最初放置在三角形的顶点)的文本栏后,我们将每个标签移动到所需的位置 library(ggtern) library(grid) g <- data.frame(y=c(1,0,0), x=c(0,1,.4), z=c(0,0,.6), Ser

三元图如下图所示。我想使用R中的ggtern包添加Z=60、Z=90和Y=60的标签

R代码链接是

一个相当“原始”的解决方案是与Grob合作。
在找到包含x、y和z标签(最初放置在三角形的顶点)的文本栏后,我们将每个标签移动到所需的位置

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)
库(ggtern)
图书馆(网格)

g这不是一个完美的答案,但我试图通过
注释来达到您想要的结果,如下所示:

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 
这将产生以下图片:


我在最新版本中添加了一个新的几何体,使这类事情变得更简单,请查看:geom_text_视口和geom_label_视口。您仍然需要抑制遮罩,或将其放置在文本层下方,但这两种几何图形对于相对于视口的x和y笛卡尔[0,1]限制放置标签更为直观。