2012-07-23 15 views
7

ggplot2 का उपयोग करके एक्स मान के ऊपर किसी भी चीज़ के लिए एक बिन बनाएं, मैं एक हिस्टोग्राम बनाना चाहता हूं जहां एक्स से ऊपर कुछ भी अंतिम बिन में समूहीकृत हो। उदाहरण के लिए, यदि मेरा अधिकांश वितरण 100 से 200 के बीच था, और मैं 10 तक बिन करना चाहता था, तो मैं 200 से ऊपर कुछ भी 200 200 "में पिन करना चाहता हूं।GGPlot2 हिस्टोग्राम

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
hist <- ggplot(df, aes(x=visits)) + geom_histogram(binwidth=50) 

मैं एक्स अक्ष को कैसे सीमित कर सकता हूं, जबकि अभी भी डेटा को मैं सीमित करना चाहता हूं?

उत्तर

4

शायद आप geom_histogram के लिए breaks तर्क के लिए देख रहे:

# create some fake data  
id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 

#plot the data 
require(ggplot2) 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10), max(visits)), position = "identity") + 
    coord_cartesian(xlim=c(0,210)) 

यह है कि नकली डेटा यहाँ बहुत बुरा लग रहा है कैविएट्स के साथ (इस प्रकार दिखाई देगा और अक्ष के साथ ही समायोजित करने की आवश्यकता टूट जाता है से मेल खाते हैं):

manual breaks on histogram

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

साथ

# create breaks and labels 
brks <- c(seq(0, 200, by=10), max(visits)) 
lbls <- c(as.character(seq(0, 190, by=10)), "200+", "") 
# true 
length(brks)==length(lbls) 

# hmmm 
ggplot(df, aes(x=visits)) + 
    geom_histogram(breaks=brks, position = "identity") + 
    coord_cartesian(xlim=c(0,220)) + 
    scale_x_continuous(labels=lbls) 

साजिश त्रुटियों:

Error in scale_labels.continuous(scale) : 
    Breaks and labels are different lengths 

कौन सा this तरह लग रहा है लेकिन यह है कि 8 महीने पहले तय किया गया था

हो सकता है कि किसी और को यहाँ वजन कर सकते हैं।

+0

बस के बारे में स्थान पर है यही कारण है कि। यदि मैं "200+" जैसे कुछ जोड़ना चाहता हूं तो आप एक्स-अक्ष लेबल कैसे अपडेट करेंगे। – mikebmassey

+0

मुझे लगता है कि 'scale_x_continuous (लेबल = ...)' के माध्यम से मुझे लगता है कि मुझे पूरा यकीन नहीं है –

2

आप इसे एक छोटे से बिन लेबलिंग के मुद्दों के आसपास मिलता है तो बस अपने डेटा सबसेट और एक नया बलि डेटा फ्रेम में binned मान बनाने के लिए हेराफेरी करना चाहते हैं:

id <- sample(1:100000, 10000, rep=T) 
visits <- sample(1:1200,10000, rep=T) 

#merge to create a dataframe 
df <- data.frame(cbind(id,visits)) 
#create sacrificical data frame 
dfsac <- df 
dfsac$visits[dfsac$visits > 200 ] <- 200 

फिर breaks आदेश का उपयोग करें scale_x_continuous में आसानी से अपने बिन लेबल निर्धारित करने के:

ggplot(data=dfsac, aes(dfsac$visits)) + 
    geom_histogram(breaks=c(seq(0, 200, by=10)), 
       col="black", 
       fill="red") + 
    labs(x="Visits", y="Count")+ 
    scale_x_continuous(limits=c(0, 200), breaks=c(seq(0, 200, by=10)), labels=c(seq(0,190, by=10), "200+")) 

enter image description here