आर

2011-12-04 9 views
6

में लेआउट के अंदर लेआउट लेआउट मैं heatmap.2 का उपयोग करके एक मैट्रिक्स से एक हीटमैप बनाने के लिए आर का उपयोग कर रहा हूं - और मैं इन छवियों को एक बड़ी छवि में समूहित करना चाहता हूं - जो मैं आमतौर पर इसे प्राप्त करने के लिए उपयोग करता हूं वह लेआउट() - लेकिन यह काम नहीं करता है, क्योंकि heatmap.2 लेआउट का उपयोग करता है, और स्पष्ट रूप से लेआउट दोबारा काम नहीं करता है।आर

क्या किसी के पास लेआउट के बिना 2 छवियों को एक साथ समूहबद्ध करने, या लेआउट समर्थन रिकर्सिव कॉल करने के तरीके के बारे में कोई सुझाव है?

mat = matrix(nrow=3,nrow=3,1:9) 
layout(matrix(nrow=2,ncol=1)) 
heatmap.2(mat) ## overrides the layout and produces only one plot that takes whole screen 
heatmap.2(mat) ## still only one image 

धन्यवाद।

उत्तर

6

एक हैक है जो लगभग निश्चित रूप से एक आदर्श समाधान नहीं है, लेकिन यह आपको शुरू कर सकता है।

heatmap.2 फ़ंक्शन का अपना संस्करण बनाएं hm3

if (missing(lhei) || is.null(lhei)) 

और layout कॉल: hm3 के लिए कोड में, के बीच सभी लाइनों बाहर टिप्पणी

layout(lmat, widths = lwid, heights = lhei, respect = FALSE) 

यह कोड का एक बड़ा हिस्सा है, शायद 30 लाइनों है। अब निम्न कोड की ओर से dendrograms और चाबी पक्ष के साथ दो गर्मी नक्शे का उत्पादन:

x <- as.matrix(mtcars) 
lhei <- c(1.5, 4,1.5,4) 
lwid <- c(1.5, 4,1.5,4) 
layout(rbind(c(4,3,8,7),c(2,1,6,5)), 
    widths = lwid, heights = lhei, respect = FALSE) 
hm3(x) 
hm3(x) 

enter image description here

जाहिर है, इस काफी तोड़ मरोड़ की आवश्यकता होती है यह अच्छे लग रहे (और एक बड़ा साजिश रचने क्षेत्र बनाने के लिए होगा; मैंने यहाँ पोस्ट करने के लिए एक उचित आकार होने के लिए सब कुछ squished)।

यह पूरी तरह से अनचाहे है। ऐसा लगता है कि hm3 फ़ंक्शन में से किसी भी विकल्प का उपयोग करके जो साजिश की उपस्थिति को नियंत्रित करता है, चीजों को थोड़ा सा गड़बड़ाने का कारण बनता है। लेकिन यह उन मुद्दों को हल करने के लिए अपने स्वयं के प्रयोग के लिए एक अच्छा प्रारंभिक बिंदु हो सकता है।

+0

धन्यवाद - बहुत बुरा यह करने का कोई आसान तरीका नहीं है ... अगर कोई अधिक सामान्य समाधान के बारे में जानता है तो मैं प्रश्न थोड़ा और छोड़ दूंगा, लेकिन ऐसा लगता है कि जीवन कठिन है और आपका समाधान सबसे अच्छा है, (हालांकि मैं शायद हीटमैप कोड के साथ खेलने की बजाय मेरी समस्या का समाधान करूंगा जो मजेदार नहीं है)। – dan12345

1

आप परिणामों के साथ क्या करने की योजना बना रहे हैं?

यदि आप स्क्रीन पर दोनों तरफ 2 हीटमैप्स की तुलना करना चाहते हैं तो उन्हें एक सिंगल प्लॉट में संयोजित करने के बजाय आप 2 प्लॉटिंग डिवाइस खोल सकते हैं और तुलना करने के लिए उन्हें एक तरफ व्यवस्थित कर सकते हैं (एक ग्राफ बनाने से कहीं अधिक सरल) :

heatmap.2(mat1) 
dev.new() 
heatmap.2(mat2) 

अब अपने माउस का उपयोग करके दूसरे के पक्ष में खींचें।

यदि आप एक प्रकाशन में संयुक्त ग्राफिक शामिल करना चाहते हैं तो 2 प्लॉट बनाने के लिए यह सबसे आसान हो सकता है और लेख बनाने के लिए आप जो भी प्रोग्राम उपयोग कर रहे हैं, उसे बस एक तरफ सेट कर सकते हैं। यदि आपको एक फ़ाइल में उनकी आवश्यकता है तो भी आप 2 हीटमैप्स (या अन्य प्लॉट्स) को 2 फाइलों के रूप में सहेज सकते हैं, फिर छवियों के साथ ग्राफिक्स के साथ 2 फाइलों को गठबंधन करने के लिए इमेजमैजिक, गिंप, या इंकस्केप जैसे टूल का उपयोग करें।