2012-05-07 10 views
5

का उपयोग करके geom_point पर टेक्स्ट व्यवस्थित करें मेरे पास कुछ समय बिंदुओं के साथ एक पंक्ति साजिश है जो अकेले रंग से अलग होना मुश्किल है और इसलिए मैं साजिश पर समय बिंदु लेबल करना चाहता हूं, लेकिन लेबल ओवरलैप (नीचे साजिश देखें) एक तरह से जहां लेबल को पढ़ना मुश्किल है।geom_text

साजिश वर्तमान में इस तरह दिखेगा,

current plot

मुझे आश्चर्य है कि अगर वहाँ 'ढेर' लेबल या किसी तरह से (स्क्रिप्ट) है कि यह सुनिश्चित कर सकते हैं वे ओवरलैप नहीं करने के लिए एक तरीका है। कुछ इस तरह,

 - - >

किसी भी मदद की सराहना की जाएगी।

यहाँ कोड मैं साजिश का उत्पादन किया जाता,

require(ggplot2) 
require(plyr) 
require(reshape) 

# create sample data 
set.seed(666) 
dfn <- data.frame(
Referral = seq(as.Date("2007-01-15"), len= 26, by="23 day"), 
VISIT01 = seq(as.Date("2008-06-15"), len= 24, by="15 day")[sample(30, 26)], 
VISIT02 = seq(as.Date("2008-12-15"), len= 24, by="15 day")[sample(30, 26)], 
VISIT03 = seq(as.Date("2009-01-01"), len= 24, by="15 day")[sample(30, 26)], 
VISIT04 = seq(as.Date("2009-03-30"), len= 24, by="60 day")[sample(30, 26)], 
VISIT05 = seq(as.Date("2010-11-30"), len= 24, by="6 day")[sample(30, 26)], 
VISIT06 = seq(as.Date("2011-01-30"), len= 24, by="6 day")[sample(30, 26)], 
Discharge = seq(as.Date("2012-03-30"), len= 24, by="30 day")[sample(30, 26)], 
Patient = factor(1:26, labels = LETTERS), 
openCase = rep(0:1, 100)[sample(100, 26)]) 

# set today's data for cases that do not have an Discharge date 
dfn$Discharge[ is.na(dfn$Discharge) ] <- as.Date("2014-01-30") 

mdfn <- melt(dfn, id=c('Patient', 'openCase'), variable_name = "Visit") 
names(mdfn)[4] <- 'Year' # rename 

# order data in mdfn by 'Referral' in dfn 
mdfn$Patient <- factor(mdfn$Patient,levels = 
(dfn$Patient[order(dfn$Referral)]),ordered = TRUE) 

# subset a dataset to avoid 'Discharge' for cases that are not closed 
mdfn2 <- subset(mdfn,!(Visit=="Discharge" & Year > as.Date("2014-01-01"))) 

# the plot as it looks now 
ggplot(mdfn, aes(Year, Patient)) + 
    geom_blank() + 
    geom_line(data = mdfn[mdfn$openCase == 0,], colour = "black") + 
    geom_line(data = mdfn[mdfn$openCase == 1,], colour = "grey") + 
    geom_point(data = mdfn2, aes(colour = Visit), size = 4, shape = 124) + 
    geom_text(data=mdfn2, mapping=aes(x=Year, y=Patient, 
    label=substr(Visit, 1, 7), colour=Visit), size=2, 
    vjust=-.4, hjust=-.1, angle = 00) 
+1

गुम कार्यों, अनुपलब्ध डेटा प्रतिलिपि प्रस्तुत करने योग्य नहीं। –

+0

मुझे नहीं पता कि यह कैसे करना है, लेकिन क्या आपको वास्तव में लेबल की आवश्यकता है? उस जानकारी को पहले से ही एक किंवदंती प्रदान कर रहा है। –

+1

संभावित डुप्लिकेट [आर में इंटेलिजेंट प्वाइंट लेबल प्लेसमेंट] (http://stackoverflow.com/questions/7611169/intelligent-point-label-placement-in-r) – joran

उत्तर

11

आप यात्रा के संख्यात्मक मान के अनुसार लेबल के ऊर्ध्वाधर स्थान बदल सकता है।

कुंजी है:

y=(as.numeric(Patient)+0.25*as.numeric(Visit)%%3)-0.12 

यह वर्तमान में उत्पादन करता है: यात्रा के मूल्यों (%% 3) है, जो आप को बढ़ाने या
कम कर सकते हैं प्रत्येक स्तर में एक चौथाई से अलग किया जाता के अनुसार
3 विभिन्न स्तरों y लेबल (0.25)
पहले लेबल क्षैतिज रेखा
दूसरा नीचे 0.12 है के बीच की दूरी का 0.12 से ऊपर

है enter image description here

require(ggplot2) 
require(plyr) 
require(reshape) 
# create sample data 
set.seed(666) 
dfn <- data.frame(
    Referral = seq(as.Date("2007-01-15"), len= 26, by="23 day"), 
    VISIT01 = seq(as.Date("2008-06-15"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT02 = seq(as.Date("2008-12-15"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT03 = seq(as.Date("2009-01-01"), len= 24, by="15 day")[sample(30, 26)], 
    VISIT04 = seq(as.Date("2009-03-30"), len= 24, by="60 day")[sample(30, 26)], 
    VISIT05 = seq(as.Date("2010-11-30"), len= 24, by="6 day")[sample(30, 26)], 
    VISIT06 = seq(as.Date("2011-01-30"), len= 24, by="6 day")[sample(30, 26)], 
    Discharge = seq(as.Date("2012-03-30"), len= 24, by="30 day")[sample(30, 26)], 
    Patient = factor(1:26, labels = LETTERS), 
    openCase = rep(0:1, 100)[sample(100, 26)]) 

# set today's data for cases that do not have an Discharge date 
dfn$Discharge[ is.na(dfn$Discharge) ] <- as.Date("2014-01-30") 

mdfn <- melt(dfn, id=c('Patient', 'openCase'), variable_name = "Visit") 
names(mdfn)[4] <- 'Year' # rename 

# order data in mdfn by 'Referral' in dfn 
mdfn$Patient <- factor(mdfn$Patient,levels = 
    (dfn$Patient[order(dfn$Referral)]),ordered = TRUE) 

# subset a dataset to avoid 'Discharge' for cases that are not closed 
mdfn2 <- subset(mdfn,!(Visit=="Discharge" & Year > as.Date("2014-01-01"))) 

# the plot as it looks now 
ggplot(mdfn, aes(Year, Patient)) + 
    geom_blank() + 
    geom_line(data = mdfn[mdfn$openCase == 0,], colour = "black") + 
    geom_line(data = mdfn[mdfn$openCase == 1,], colour = "grey") + 
    geom_point(data = mdfn2, aes(colour = Visit), size = 4, shape = 124) + 
    geom_text(data=mdfn2, mapping=aes(x=Year, y=(as.numeric(Patient)+0.25*as.numeric(Visit)%%3)-0.12, 
            label=substr(Visit, 1, 7), colour=Visit), size=2, 
      hjust=-.1, angle = 00) 
+0

सुरुचिपूर्ण, प्रभावशाली। अब मुझे केवल यह पता लगाने की जरूरत है कि तीन बार बिंदु एक-दूसरे के नजदीक होते हैं और इससे बचने के लिए कि लेबल लाइन पर रखे जाते हैं। धन्यवाद। –

+0

पाठ अब लाइन पर नहीं है। यदि आपको अधिक ऊंचाई ऊंचाई की आवश्यकता है, तो %% के बाद संख्या बढ़ाएं और शिफ्ट के आकार को कम करें (वर्तमान में 0.25), जिसके लिए छोटे टेक्स्ट की आवश्यकता हो सकती है। –

+0

यदि यह वास्तविक डेटा नहीं है और यह वास्तविक डेटा के साथ काम नहीं करता है, तो इसे वास्तविक डेटा प्रदान करने के बारे में सोचें: http://stackoverflow.com/a/10458688/742447 –

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