2017-09-17 6 views
5

मुझे लगता है मैं एक थोड़ा अजीब तरह से dotplot उपयोग कर रहा हूँ पता है पर अंक रंग नहीं है के साथ एक पुस्तिका ढाल लागू करने के लिए है, लेकिन मुझे मिल गया है यह ग्राफिक मैं उत्पादन चाहते हैं; जो दर्शाता है कि प्रत्येक प्रीमियर लीग फुटबॉल क्लब में प्रत्येक स्थिति में कितने खिलाड़ी होते हैं, प्रत्येक डॉट एक खिलाड़ी को दिखाता है। , इन्हें अलग से साजिश रची है, के साथ दूसरे नीचे धकेल दिया था ताकि वे ओवरलैप नहीं दिखा खिलाड़ी एक टीम खिलाड़ी या एक युवा खिलाड़ी है कि क्या - मैं कई श्रेणियों की है।ggplot2 - कैसे एक किंवदंती जब डॉट साजिश एक ही निर्देशांक

मैं इसे करने के लिए जानकारी की एक और परत जोड़ने के लिए है, जो कितने मिनट प्रत्येक खिलाड़ी निभाई है के आधार पर डॉट्स छायांकन है चाहता हूँ। मेरे पास यह डेटा मेरे डेटा फ्रेम में है।

यह रंग कोड डॉट्स पूरी तरह से, जब डेटा "वर्गीकृत किया" है, जो मामले में यह ग्रे पत्ते को छोड़कर।

screenshot of my plot

मैं एक अच्छा आर प्रश्न के उत्पादन पर मार्गदर्शन पढ़ा है। मैंने समस्या को दिखाने के लिए डेटा को काट दिया है, बिना किसी विशाल, और कोड की सभी पंक्तियों को हटा दिया है जैसे डेटा को इंगित करना और ग्राफ शीर्षक इत्यादि।

यह 20 खिलाड़ियों का नमूना है, जो 16 अच्छी तरह से रंगीन बिंदु, और भूरे रंग के 2 जोड़े, uncoloured बिंदुओं।

library(ggplot2) 
ggplot()+ 
geom_dotplot(data=u21, aes(x=team, y=pos, fill=mins), binaxis='y', stackdir="center", stackratio = 1, dotsize = 0.1, binwidth=0.75, position=position_nudge(y=-0.1)) + 
scale_fill_gradient(low="pink",high='red') 

अपने वास्तविक कोड में मैं तो ggplot लाइन फिर से चलाने के लिए, लेकिन एक अलग डेटा फ्रेम, एक अलग रंग ढाल के साथ आह्वान करने और एक अलग:

structure(list(team = structure(c(2L, 3L, 4L, 4L, 5L, 6L, 8L, 9L, 11L, 12L, 5L, 6L, 7L, 10L, 12L, 12L, 1L, 4L, 5L, 7L), .Label = c("AFC Bournemouth", "Arsenal", "Brighton & Hove Albion", "Chelsea", "Crystal Palace", "Everton", "Huddersfield Town", "Leicester City", "Liverpool", "Swansea City", "Tottenham Hotspur", "West Bromwich Albion"), class = "factor"), 
role = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "U21", class = "factor"), 
name = structure(c(10L, 2L, 1L, 15L, 13L, 19L, 4L, 7L, 20L, 
8L, 17L, 9L, 18L, 11L, 3L, 6L, 14L, 5L, 12L, 16L), .Label = c("Boga", 
"Brown", "Burke", "Chilwell", "Christensen", "Field", "Grujic", 
"Harper", "Holgate", "Iwobi", "Junior Luz Sanches", "Loftus Cheek", 
"Lumeka", "Mousset", "Musonda", "Palmer", "Riedwald", "Sabiri", 
"Vlasic", "Walker-Peters"), class = "factor"), pos = structure(c(6L, 
7L, 6L, 6L, 6L, 5L, 2L, 4L, 3L, 6L, 1L, 1L, 5L, 4L, 6L, 4L, 
7L, 1L, 4L, 5L), .Label = c("2. CB", "3. LB", "3. RB", "4. CM", 
"5. AM", "5. WM", "6. CF"), class = "factor"), mins = c(11, 
24, 18, 1, 25, 10, 90, 6, 90, 20, 99, 180, 97, 127, 35, 156, 
32, 162, 258, 124)), .Names = c("team", "role", "name", "pos", "mins"), row.names = 471:490, class = "data.frame") 

यहाँ कोड मैं का उपयोग कर रहा है घबराओ ताकि डॉट्स ओवरलैप न हों।

उत्तर

3

असल में क्या हो रहा है कि "समूहित" बिंदुओं को एनए मानों के रूप में माना जा रहा है क्योंकि ggplot को उसी x, y निर्देशांक के लिए दो मिनट मान प्राप्त हो रहे हैं, जो रंग तंत्र को तोड़ रहा है। 18 और 1. निम्नलिखित कोड/ग्राफ में परिवर्तन लागू नहीं दिखाने के लिए क्या हो रहा है पीले करने के लिए ग्रे के डिफ़ॉल्ट से महत्व देता है: उदाहरण के लिए, के "टीम = चेल्सी" और "। स्थिति = 5 WM" एक दूसरे को काटना पर, वहाँ दो मिनट कर रहे हैं:

ggplot()+ 
    geom_dotplot(data=df, aes(x=team, y=pos, fill=mins), 
       binaxis='y', stackdir="center", 
       stackratio = 1, dotsize = 0.2, binwidth=0.75, 
       position=position_nudge(y=-0.1)) + 
    scale_fill_gradient(low="pink",high='red',na.value="yellow") + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

आउटपुट:

enter image description here

यह geom_dotplot की एक रचनात्मक परीक्षण किया गया था। ऐसा नहीं है कि आप उस विधि के साथ जो भी मांग रहे हैं वह नहीं कर सकते हैं, लेकिन उस दृष्टिकोण के साथ आप जो प्रभाव चाहते हैं उसे प्राप्त करने के लिए यह अत्यधिक जटिल होगा। इसके बजाय, आपके पास geom_jitter के साथ अधिक भाग्य हो सकता है, जिसे इस प्रकार के डेटा को साजिश करने के लिए डिज़ाइन किया गया था।

ggplot(df)+ 
    geom_jitter(aes(x=team, y=pos, col=mins),width = 0.2, height = 0) + 
    scale_color_gradient(low="pink",high='red',na.value="yellow") + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

आउटपुट:

enter image description here

संपादित करें:

आप अभी भी dotplot साथ जटिल संस्करण चाहते हैं, तो घबराना से परहेज करें, फिर यहां वह भी है:

cols <- colorRampPalette(c("pink","red")) 

df$cols <- cols(
    max(df$mins,na.rm=T))[findInterval(df$mins,sort(1:max(df$mins,na.rm=T)))] 

ggplot()+ 
    geom_dotplot(data=df, aes(x=team, y=pos, col=mins, fill=cols), 
       binaxis='y',stackdir="centerwhole",stackgroups=TRUE, 
       binpositions="all",stackratio=1,dotsize=0.2,binwidth=0.75, 
       position=position_nudge(y=-0.1)) + 
    scale_color_gradient(low="pink",high='red',na.value="yellow") + 
    scale_fill_identity() + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

आउटपुट:

enter image description here

क्या तीसरा ग्राफ़ के लिए कोड में हो रही घटनाओं की कम परिचित उन लोगों के लिए: चरण 1 colorRampPalette के साथ एक ढाल रेंज स्टोर करने के लिए है, चरण 2 ध्यान से पंक्ति के df $ मिनट मूल्य के अनुसार प्रत्येक पंक्ति के लिए एक हेक्साडेसिमल रंग मान प्रदान करती है; चरण 3 दोनों रंगों का उपयोग करके डेटा प्लॉट करता है और तर्कों को भरता है ताकि एक किंवदंती दिखाई दे, फिर भी अन्यथा ग्रे (या पीले) समूहित बिंदुओं को सही मैन्युअल ढाल रंग से ढका दिया जाता है जिसे हमने scale_fill_identity() को कॉल करके सेट किया है। इस कॉन्फ़िगरेशन के साथ, आपको सही रंग और सही किंवदंती मिलती है।

+0

हाय, आपकी मदद के लिए धन्यवाद, यह है कि नमूने पर काम करता है, लेकिन जब मैं पूर्ण dataframe (~ चारों ओर 460 अंक) पर यह कोशिश है, यह के रूप में कभी कभी 3 खिलाड़ियों लेने घबराना के यादृच्छिक प्रकृति के कारण, बहुत गड़बड़ लग रहा है 4 से अधिक जगह ऊपर, तो दृश्य 'एक नज़र में' प्रकृति खो देता है। रंग कोडिंग त्रुटियों हालांकि समस्या हल करने के लिए एक अच्छा विचार है। धन्यवाद @RyanRunge –

+0

@ChrisBaker - पर्याप्त मेला। मैंने आपके विशिष्ट उपयोग मामले में सहायता के लिए जटिल विकल्प जोड़ने का निर्णय लिया। उपरोक्त संपादन देखें। – www

+0

@ChrisBaker - कृपया इसे हल करने के लिए अगले चेक मार्क क्लिक करने के लिए अगर यह आपके सवाल का जवाब दे रहा है याद है। यह समुदाय को यह जानने में मदद करता है कि इसे हल किया गया है, और यह अन्य प्रश्नों को अन्य प्रश्नों को उनके उत्तर को और तेज़ी से ढूंढने में सहायता करता है। – www

संबंधित मुद्दे