आर

2012-07-01 49 views
12

में पारिवारिक पेड़ को कैसे प्लॉट करना है, मैं चारों ओर एक परिवार के पेड़ को साजिश करने के लिए खोज रहा हूं लेकिन मुझे कुछ ऐसा नहीं मिल सका जो मैं पुन: पेश कर सकता हूं। मैं हैडली की किताब ggplot के बारे में देख रहा हूं लेकिन वही बात।आर

मैं एक परिवार के पेड़ एक स्रोत एक dataframe इस के समान के रूप में होने के प्लॉट करने के लिए करना चाहते हैं:

dput(head(familyTree)) 
structure(
    list(
    id = 1:6, 
    cnp = c("11", NA, "22", NA, NA, "33"), 
    last_name = c("B", "B", "B", NA, NA, "M"), 
    last_name_alyas = c(NA, NA, NA, NA, NA, "M"), 
    middle_name = c("C", NA, NA, NA, NA, NA), 
    first_name = c("Me", "P", "A", NA, NA, "S"), 
    first_name_alyas = c(NA, NA, NA, NA, NA, "F"), 
    maiden_name = c(NA, NA, "M", NA, NA, NA), 
    id_father = c(2L, 4L, 6L, NA, NA, 8L), 
    id_mother = c(3L, 5L, 7L, NA, NA, 9L), 
    birth_date = c("1986-01-01", "1963-01-01", "1964-01-01", NA, NA, "1936-01-01"), 
    birth_place = c("City", "Village", "Village", NA, NA, "Village"), 
    death_date = c("0000-00-00", NA, NA, NA, NA, "2007-12-23"), 
    death_reason = c(NA, NA, NA, NA, NA, "stroke"), 
    nr_brothers = c(NA, 1L, NA, NA, NA, NA), 
brothers_names = c(NA, "M", NA, NA, NA, NA), 
    nr_sisters = c(1L, NA, 1L, NA, NA, 2L), 
    sisters_names = c("A", NA, "E", NA, NA, NA), 
    school = c(NA, "", "", NA, NA, ""), 
    occupation = c(NA, "", "", NA, NA, ""), 
    diseases = c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_), 
    comments = c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, NA_character_) 
), 
    .Names = c("id", "cnp", "last_name", "last_name_alyas", "middle_name", "first_name", "first_name_alyas", "maiden_name", "id_father", "id_mother", "birth_date", "birth_place", "death_date", "death_reason", "nr_brothers", "brothers_names", "nr_sisters", "sisters_names", "school", "occupation", "diseases", "comments"), 
    row.names = c(NA, 6L), 
    class = "data.frame" 
) 

वहाँ किसी भी तरह से मैं ggplot के साथ एक परिवार के पेड़ प्लॉट कर सकते हैं है? यदि नहीं, तो मैं इसे किसी अन्य पैकेज का उपयोग करके कैसे साजिश कर सकता हूं।

प्राथमिक कुंजी 'आईडी' है और आप "id_father" और "id_mother" का उपयोग करके परिवार के अन्य सदस्यों से जुड़ते हैं।

+4

तुम क्या करने की कोशिश की है? क्या आप जानते हैं कि आर और उसके ग्राफिक्स का उपयोग कैसे करें? क्या आपने अपने डेटा और उसके ग्राफिक्स विधियों का प्रतिनिधित्व करने के लिए igraph का उपयोग करना देखा है? एक पारिवारिक पेड़ एक प्रकार का ग्राफ है, इसलिए igraph और पूरे ग्राफिकल मॉडल कार्य दृश्य शुरू करने के लिए एक अच्छी जगह होगी। क्या आपने अभी तक इसे पढ़ा है? – Spacedman

+0

शायद आप [ggphylo] (https://github.com/gjuggler/ggphylo) में प्लॉट्स को संशोधित कर सकते हैं, gylplot2 के लिए एक विस्तार phylogenetic पेड़ भूखंड बनाने के लिए। – sckott

उत्तर

8

टिप्पणियों में उल्लेख के अनुसार, आपको igraph आज़माएं। यहाँ एक जल्दी शुरू है:

require(igraph) 
mothers=familyTree[,c('id','id_mother','first_name', 'last_name')] 
fathers=familyTree[,c('id','id_father','first_name', 'last_name')] 
mothers$name=paste(mothers$first_name,mothers$last_name) 
fathers$name=paste(fathers$first_name,fathers$last_name) 
names(mothers)=c('parent','id','first_name','last_name','name') 
names(fathers)=c('parent','id','first_name','last_name','name') 
links=rbind(mothers,fathers) 
links=links[!is.na(links$id),] 
g=graph.data.frame(links) 
co=layout.reingold.tilford(g, flip.y=F) 
plot(g,layout=co) 

enter image description here

कोई नाम नहीं हैं, और तीर गलत दिशा में जा रहे हैं, लेकिन आप उसे वहां से जाने के लिए सक्षम होना चाहिए।

+1

धन्यवाद नाटक। मैंने इग्राफ को देखा लेकिन यह पता नहीं लगा कि कहां से शुरू करना है। आपका उदाहरण एक अच्छी शुरुआत है। –

+0

मेरे पास एक और सवाल है। मैं पेड़ 180 डिग्री बारी करने के लिए और शिखर पर संख्याओं के बजाय नाम रखने में कामयाब रहे। समस्या यह है कि पेड़ बहुत भीड़ हो जाता है। क्या एक्स कैमरा पर शिखर के बीच अधिक रिक्त स्थान रखने के लिए मैं लेआउट निर्दिष्ट करता हूं? –

+0

ईमानदार होने के लिए मैंने कुछ दिनों पहले केवल 'igraph' के बारे में सीखा। उनके पास उनकी वेबसाइट पर कुछ अच्छा प्रलेखन (http://igraph.sourceforge.net/) है, मुझे यकीन है कि यह संभव है। – nograpes

0

क्या आपने kinship2 पैकेज की कोशिश की है?

library(kinship2) 
df <- data.frame(id = c(1,2,3,4,5,6), sex = c(1,2,1,2,2,2), dadid = c(0,0,0,0,1,3), momid = c(0,0,0,0,2,4), famid = 1) 
relation1 <- matrix(c(2,3,4,1), nrow = 1) 
foo <- pedigree(id = df$id, dadid = df$dadid, momid = df$momid, sex = df$sex, relation = relation1, famid = df$famid) 
ped <- foo['1'] 
plot(ped) 

you can see the resulting plot here