Ggplot2 में स्कैप्लॉट क्षेत्रों के आसपास साफ बहुभुज कैसे आकर्षित करें [बंद]


32

मैं स्कैटरप्लॉट पर बिंदुओं के समूह के चारों ओर एक साफ बहुभुज कैसे जोड़ सकता हूं? मैं ggplot2 का उपयोग कर रहा हूं, लेकिन के परिणामों से निराश हूं geom_polygon।

टैब-सीमांकित पाठ फ़ाइल के रूप में डेटासेट वहाँ पर है । नीचे दिया गया ग्राफ देशों के एक समूह में स्वास्थ्य और बेरोजगारी के प्रति दृष्टिकोण के दो उपायों को दर्शाता है:

घनत्व 2d के साथ स्कैटरप्लॉट

मैं geom_density2dकम फैंसी से स्विच करना चाहूंगा लेकिन अनुभवजन्य रूप से अधिक सही geom_polygon। अनसोल्ड डेटा पर परिणाम अप्रभावी है:

यहाँ छवि विवरण दर्ज करें

मैं 'स्वच्छ' बहुभुज कैसे खींचता हूं जो न्यूनतम-अधिकतम yx मानों के समोच्च पथ के रूप में व्यवहार करता है? मैंने बिना किसी लाभ के डेटा को सॉर्ट करने की कोशिश की।

कोड:

print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))

dवस्तु के साथ प्राप्त की है इस CSV फ़ाइल ।

समाधान:

वेन , एंडी डब्ल्यू और दूसरों को उनके संकेत के लिए धन्यवाद ! GitHub पर डेटा, कोड और ग्राफ़ पोस्ट किए गए हैं । परिणाम इस तरह दिखता है:

परिणाम


6
आप जिस शब्द की तलाश कर रहे हैं वह अंकों का उत्तल हल (या संभावित रूप से अल्फ़ा पतवार) है। आपको इनकी गणना करने के लिए एक आर फ़ंक्शन खोजने में सक्षम होना चाहिए और फिर उन्हें प्लॉट में परतों के रूप में जोड़ने में सक्षम होना चाहिए।
— एंडी डब्ल्यू

सही शब्दावली को इंगित करने के लिए धन्यवाद! मैं अब तक के ?chullसाथ उपयोग करने में विफल रहा हूं ggplot2। मुझे यकीन नहीं है कि मैं इसे सही तरीके से कोड कर रहा हूं, और आशा करता हूं कि किसी ने इसे पहले ही कर लिया है।
— Fr.

क्या आप प्रश्न में अपना R कोड जोड़ सकते हैं?
— यूरी पेत्रोव्स्की

एक बात ध्यान दें: आप जो प्रदर्शित कर रहे हैं वह मैक्सिमा है, जो "आउटलेयर" हो सकता है। मेरा मानना ​​है कि आर पैकेज alphahullउत्तल पतवार खोजने के समान काम करता है, लेकिन आपको विश्वास अंतराल जैसे कुछ करने की कोशिश करने के लिए इसे अंदर / बाहर समायोजित करने की अनुमति देता है।
— वेन

@Wayne, एक अल्फा हूल एक विश्वास अंतराल (किसी भी तरह से कल्पना करने योग्य) नहीं है। एक संक्षिप्त विवरण और एक अल्फा पतवार क्या है के कुछ संदर्भों के लिए इस gis.se प्रश्न को देखें । शायद आपके विश्वास के प्रति विश्वास बढ़ता है, या शायद बैगप्लेट्स (आउटलेर्स की पहचान करने के लिए द्वि-संस्करण बॉक्सप्लेट)।
— एंडी डब्ल्यू

जवाबों:


33

कुछ गुग्लिंग के साथ मैं गोटा मोरोटा की वेबसाइट पर आया था, जिसका उदाहरण उसकी वेबसाइट पर पहले से ही है । नीचे वह उदाहरण है जो आपके डेटा के लिए विस्तारित है।

यहाँ छवि विवरण दर्ज करें

library(ggplot2)
work <- "E:\\Forum_Post_Stuff\\convex_hull_ggplot2"
setwd(work)

#note you have some missing data
mydata <- read.table(file = "emD71JT5.txt",header = TRUE, fill = TRUE)
nomissing <- na.omit(mydata) #chull function does not work with missing data

#getting the convex hull of each unique point set
df <- nomissing
find_hull <- function(df) df[chull(df$eff, df$man), ]
hulls <- ddply(df, "issue", find_hull)

plot <- ggplot(data = nomissing, aes(x = eff, y = man, colour=issue, fill = issue)) +
geom_point() + 
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Efficiency", y = "Mandate")
plot

धन्यवाद, मैं तदनुसार कोड को संशोधित करूंगा। दुर्भाग्य से, आपकी छवि फ़ाइल यहां लोड नहीं होती है, लेकिन कोड है।
— Fr.

@Fr। , वास्तव में समस्या क्या है?
— एंडी डब्ल्यू

@AndyW दुर्भाग्य से, कोड लापता मूल्यों का समर्थन नहीं करता है, और मुझे ऐसा करने के लिए इसे ट्विक करने का कोई तरीका नहीं मिला।
— Fr.

@ फ़र।, आप वास्तव में उन टिप्पणियों को समाप्त करने के अलावा लापता डेटा मूल्यों को कैसे संभालना चाहते हैं? किसी भी उचित प्रतिनियुक्ति तकनीक का परिणाम गैर-लापता टिप्पणियों के उत्तल पतवार के अंदर होगा।
— एंडी डब्ल्यू

@AndyW का मतलब है कि फंक्शन को NAमारना chull। मैं उम्मीद करूंगा कि इसे सिर्फ नजरअंदाज किया जाए, लेकिन यह ऐसा करने में विफल है और मुझे na.omit()इसे काम करने के लिए उपयोग करने का कोई तरीका नहीं मिला । मुझे यकीन है कि यह संभव है, मेरे पास पिछले समाधान से परे जाने के लिए हैकरी कौशल नहीं है।
— Fr.

8

अगर मैं आपकी समस्या को समझते हैं, आप में से उत्तल पतवार के लिए देख रहे healthहैं और की unemployment। आर में ऐसा करने के लिए संभवतः कई पैकेज हैं, जिनमें से एक पैकेज है geometry। मुझे लगता है कि अंक परिधि के चारों ओर क्रमबद्ध हैं, लेकिन आपको इसकी जाँच करनी होगी।

संपादित करें: यहाँ एक उदाहरण है, जो उपयोग नहीं करता है ggplot, लेकिन मुझे आशा है कि यह उपयोगी है। chullदस्तावेज़ में उदाहरण गलत लगता है, जो आपको फेंक सकता है:

X <- matrix(rnorm(2000), ncol = 2)
X.chull <- chull (X)
X.chull <- c(X.chull, X.chull[1])
plot (X)
lines (X[X.chull,])

संपादित 2: ठीक है, यहाँ ggplot2 का उपयोग कर कुछ है। हम बारी Xएक में data.frameचर के साथ xऔर y। फिर:

library(ggplot2)
X <- as.data.frame(X)
hull <- chull(X)
hull <- c(hull, hull[1])
ggplot(X, aes(x=x, y=y)) + geom_polygon(data=X[hull,], fill="red") + geom_point()

ध्यान दें कि मैं ggplot से geom_pointडेटा ( X) और aes का उपयोग कर रहा हूं, जबकि मैं इसे ओवरराइड कर रहा हूं geom_polygon।

इसे पूरी तरह से प्राप्त करने के लिए, आपको अलग करने के लिए barतीसरे कॉलम का उपयोग करके, दोनों मुद्दों के लिए पतवार के लिए x और y डालने की आवश्यकता होगी issue।


उत्तल पतवार के बारे में सही। मैंने chullउत्तल पतवार उत्पन्न करने के लिए उपयोग करने की कोशिश की है, लेकिन परिणामों का उपयोग करने में विफल रहा है ggplot2।
— Fr.

@ फ़र: मैंने अपने उत्तर का त्वरित संपादन किया है। देखें कि क्या यह आपको सही रास्ते पर लाता है।
— वेन

मैं देख सकता हूं कि यह अपने आप कैसे काम करता है, लेकिन मुझे आश्चर्य है कि उस अंतिम पंक्ति को कैसे प्राप्त किया जाए ggplot2।
— Fr.

@ फ़र: ठीक है, अब कैसे?
— वेन

इसने काम कर दिया! धन्यवाद। मुझे na.omitएनए से छुटकारा पाने के लिए जोड़ना था जो chullकाम करने से रोकते हैं । एक बार फिर धन्यवाद।
— Fr.

5

इस दोपहर तक, मैंने chullफ़ंक्शन के रूप में एक आर पैकेज के अंदर फ़ंक्शन लपेटा है geom_convexhull।

एक बार पैकेज लोड होने के बाद, इसे किसी अन्य जियोम के रूप में इस्तेमाल किया जा सकता है, आपके मामले में यह कुछ इस तरह होना चाहिए:

ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
  geom_convexhull(alpha=.5) + 
  geom_point() + 
  labs(x = "Efficiency", y = "Mandate"))

पैकेज github पर उपलब्ध है: https://github.com/cmartin/ggConvexHull


इसके लिए बहुत - बहुत धन्यवाद! जब chullतक मुझे यह नहीं मिला, मैं एक समूहीकरण कारक पर लागू करने का प्रयास करते समय अवांछित उत्पादन से निराश हो रहा था ।
— जॉगल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.