में एकाधिक ज्यामिति वाले विज़ुअल ऑब्जेक्ट्स के लिए प्लॉट ऑर्डर को नियंत्रित करना मैं ऑब्जेक्ट ओवरलैप करते समय दिखाई देने वाले नियंत्रण को नियंत्रित करने के लिए एक विशिष्ट क्रम में प्लॉट करना चाहता हूं। प्रत्येक डेटा पंक्ति 2 ज्यामिति परतों के संयुक्त रूप से मानचित्र करती है - साजिश के विवरणों की आवश्यकता होती है। मैं ऐसा करने के लिए एक लूप का उपयोग कर रहा हूं, लेकिन यह बहुत धीमा है। मुझे आश्चर्य है कि क्या कोई बेहतर तरीका है? जैसेggplot2
d = data.frame(x=c(1,5,2,2,4,2), y=c(1,1,4,3,3,5), grp=c(1,1,1,2,2,2))
ggplot(d, aes(x, y, group=grp)) +
geom_polygon(aes(fill = factor(grp))) +
geom_line(size=1)
प्रत्येक बहुभुज लाइन अपने बहुभुज के साथ साजिश चाहिए - तो जैसे लाल बहुभुज की रेखा नीली बहुभुज द्वारा अस्पष्ट होनी चाहिए। क्या geom_polygon
और geom_line
दोनों एक ही डेटासेट का उपयोग करते समय इसे लूपिंग के बिना प्राप्त करने का कोई तरीका है?
संपादित करें: पाशन तरीकों ..
यहाँ पाश तरीकों मैं का उपयोग किया है रहे हैं। प्रदर्शन की तुलना करने के लिए एक बेहतर डेटासेट जोड़ा गया। मेरी मशीन पर चलाने के लिए दोनों 5.6 डिग्री लेते हैं। तुलनात्मक रूप से सामान्य दृष्टिकोण (ggplot(d, aes(x, y, fill=factor(grp))) + geom_polygon() + geom_line(size=1)
) 0.45 लेता है।
d = data.frame(x = sample(-30:30,99,rep=T) + rep(sample(1:100,33),each=3),
y = sample(-30:30,99,rep=T) + rep(sample(1:100,33),each=3),
grp = rep(1:33,each=3))
# Method 1 - for loop
p = ggplot()
for(g in unique(d$grp)){
dat = subset(d, grp == g)
p = p + geom_polygon(data=dat, aes(x, y, fill = factor(grp))) +
geom_line(data=dat, aes(x, y), size=1)
}
print(p)
# Method 2 - apply
ggplot() + lapply(unique(d$grp), FUN=function(g){
dat = subset(d, grp == g)
list(geom_polygon(data=dat, aes(x, y, fill = factor(grp))),
geom_line(data=dat, aes(x, y), size=1))
})
मेरा मानना है कि आपको जिस समस्या का सामना करना पड़ रहा है उसे लाइन के साथ करना है। यदि आप geom_line() को हटाते हैं तो आपको वांछित परिणाम मिलते हैं। साथ ही, यदि आप geom_polygon() से पहले geom_line डालते हैं तो आपको लगता है कि आपका वांछित आउटपुट –
क्या आप उस लूप को दिखा सकते हैं जिसका आप उपयोग कर रहे हैं? – Heroka
@ गोथोरी मुझे खेद है, मेरे पास कोई समाधान नहीं है। मेरे पास एकमात्र विचार है कि प्रत्येक समूह के लिए एक अतिरिक्त बहुभुज बनाना है जो कि किनारों पर थोड़ा बड़ा है, आपको लाइन की आवश्यकता है, और उनको पहले काले रंग में प्लॉट करें और फिर रंग में ओवरप्लॉट करें। हालांकि, मुझे लगता है कि यह आपकी छवि उत्पन्न करने के लिए लूप चलाने के लिए प्रोग्राम/परीक्षण के लिए और अधिक समय लेगा। – Heroka