2015-03-25 2 views
2

Это немного сложно. Я потратил несколько часов, пытаясь его решить. У меня есть треугольный график, сделанный с ggtern пакет, который должен быть установлен вручную из архива с момента его удаления.Избегайте перекрытия этикеток с помощью ggplot2 и directlabels с использованием 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) 

Помимо последней строки, то это должно производить (очень аккуратно, я думаю):

enter image description here

При попытке использовать команду directlabels, я получаю это:

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

Любые идеи? Из чтения справки кажется, что он должен работать, когда вы группировали точки данных, которых у меня нет в этом случае. Возможно ли это сделать? Есть ли другой способ? Я посмотрел на более старые вопросы и их ответы и не видел ничего полезного.

ответ

1

Попробуйте это, мне нужно будет добавить прямую метку в качестве утвержденной геометрии к пакету, тем временем, это немного взломать доступ к неэкпортируемому скрытому объекту, который содержит список утвержденных геометрий:

Примечание. Я не смог получить доступ к вашим данным по вышеуказанной ссылке, поэтому просто использовал Feldspar набор с ggtern, для демонстрации.

solution

#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) 
Смежные вопросы