使用ggplot2和directlabels避免标签重叠问题,在ggtern中的应用

3

这个有点复杂。我花了几个小时来解决它。我用ggtern制作了一个三角形图,该软件包必须手动从存档中安装,因为它已被删除。

我的数据在这里:https://osf.io/xmagp/

如果您安装了ggtern软件包,此代码应该可以让图像正常工作。

library("ggplot2")
library(ggtern)
library("directlabels")

DF = read.csv("AdmixtureInAmericasData_v3.csv", #this loads John's data
                    row.names=1) #first col as rownames

temp = DF[which(DF$US.State==1),] #subset
US.plot = ggtern(data=temp,
       aes(x=Eugenomefilledratio,
           y=Afrgenomefilledratio,
           z=Amergenomefilledratio)) +
  xlab("Euro") +
  ylab("Afri") +
  zlab("Amer") +
  tern_limits(T=.4, L=1, R=.4) +
  ggtitle("Admixture estimates for US states") +
  theme(plot.title = element_text(face="bold")) +
  geom_point() +
  geom_text(aes(label=rownames(temp)), size=3, fontface="bold", color="navyblue", alpha=.5,hjust=-0.1, position = "jitter")
US.plot

direct.label(US.plot)

除了最后一行外,这应该会产生(我认为相当整洁):

输入图片描述

当我尝试使用directlabels命令时,我得到了这个:

Error in direct.label.ggplot(US.plot) : 
  Need colour aesthetic to infer default direct labels.

有什么想法吗?从阅读帮助文档来看,它似乎只适用于具有分组数据点的情况,而在我这种情况下没有。是否可能使其正常工作?还有其他方法吗?我已查看了较旧的问题及其答案,但没有看到任何有用的信息。

1个回答

2
尝试这个,我需要将直接标签作为一个已批准的几何体添加到包中,在此期间,这是一种访问未导出的隐藏对象以包含已批准几何体列表的方法:
请注意,我无法访问上面链接中的数据,因此仅使用了 Feldspar 集合和 ggtern 进行演示。
解决方案图片:https://istack.dev59.com/e94tj.webp
#Required Libraries
library(directlabels)
library(ggtern)

#Build Sample plot
data(Feldspar)
base <- ggtern(Feldspar,
               aes(Ab,An,Or,group=Feldspar,colour=Feldspar)) + 
        geom_point() +
        geom_mask() #Manual Clipping Mask as Last Layer

#Hack
.approvedgeom = c(ggtern:::.approvedgeom,c('GeomDl'))
assignInNamespace('.approvedgeom',
                   .approvedgeom,
                   envir=as.environment('package:ggtern'))

#Render the directlabels
direct.label(base)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接