2012-11-11 17 views
6

मैं एक लंबवत हिस्टोग्राम करना चाहता हूं। आदर्श रूप में मैं प्रति दिन एक ही साजिश पर एकाधिक डाल सकता हूं।वर्टिकल हिस्टोग्राम

यदि इसे क्वांटमॉड प्रायोगिक चार्ट_Series या किसी अन्य लाइब्रेरी के साथ जोड़ा जा सकता है जो समय श्रृंखला के लिए बार खींचने में सक्षम है जो बहुत अच्छा होगा। कृपया संलग्न स्क्रीनशॉट देखें। आदर्श रूप में मैं इस तरह कुछ साजिश कर सकता था।

क्या कोई ऐसी चीज है जो मौजूदा पुस्तकालयों में बनाई गई है जो इससे मदद कर सकती हैं?

Market Profile Example

उत्तर

1

आप ग्रिड ग्राफिक्स का उपयोग तो आप घुमाया व्यूपोर्ट जहाँ आप उन्हें और घुमाया व्यूपोर्ट में भूखंड चाहते बना सकते हैं। आपको केवल एक फ़ंक्शन की आवश्यकता है जो एक निर्दिष्ट व्यूपोर्ट में ग्रिड ग्राफिक्स का उपयोग करके साजिश करेगी, मैं इसके लिए ggplot2 या संभवतः जाली का सुझाव दूंगा।

बेस ग्राफिक्स में आप घुमावदार हिस्टोग्राम प्लॉट करने के लिए अपना स्वयं का फ़ंक्शन लिख सकते हैं (plot.histogram फ़ंक्शन को संशोधित करें या rect या अन्य टूल्स का उपयोग करके स्क्रैच से अपना खुद का लिखें)। फिर आप जहां भी आप बड़ी साजिश पर चाहते हैं वहां साजिश रखने के लिए TeachingDemos पैकेज से subplot फ़ंक्शन का उपयोग कर सकते हैं।

3

व्हायोलिन भूखंड आप जो चाहते हैं उसके करीब हो सकते हैं। वे घनत्व वाले भूखंड हैं जिन्हें एक धुरी के माध्यम से प्रतिबिंबित किया गया है, जैसे कि बॉक्सप्लॉट के एक संकर और घनत्व साजिश। (बहुत वर्णन से उदाहरण से समझने के लिए आसान :-)।)

यहाँ एक सरल (कुछ बदसूरत) उनमें से ggplot2 कार्यान्वयन के उदाहरण है:

library(ggplot2) 
library(lubridate) 

data(economics) #sample dataset 

# calculate year to group by using lubridate's year function 
economics$year<-year(economics$date) 

# get a subset 
subset<-economics[economics$year>2003&economics$year<2007,]  

ggplot(subset,aes(x=date,y=unemploy))+ 
    geom_line()+geom_violin(aes(group=year),alpha=0.5) 

violin plot over a line plot of a time series

एक खूबसूरत उदाहरण हैं हो:

ggplot(subset,aes(x=date,y=unemploy))+ 
    geom_violin(aes(group=year,colour=year,fill=year),alpha=0.5, 
    kernel="rectangular")+ # passes to stat_density, makes violin rectangular 
    geom_line(size=1.5)+  # make the line (wider than normal) 
    xlab("Year")+    # label one axis 
    ylab("Unemployment")+  # label the other 
    theme_bw()+      # make white background on plot 
    theme(legend.position = "none") # suppress legend 

enter image description here

लाइन के बजाय या इसके अलावा श्रेणियों को शामिल करने के लिए, आप geom_linerange या geom_pointrange का उपयोग करेंगे।

9

मैंने बेस ग्राफिक्स में लंबवत हिस्टोग्राम करने के लिए एक साल या उससे पहले कुछ लिखा था। यहां एक उपयोग उदाहरण के साथ है।

VerticalHist <- function(x, xscale = NULL, xwidth, hist, 
         fillCol = "gray80", lineCol = "gray40") { 
    ## x (required) is the x position to draw the histogram 
    ## xscale (optional) is the "height" of the tallest bar (horizontally), 
    ## it has sensible default behavior 
    ## xwidth (required) is the horizontal spacing between histograms 
    ## hist (required) is an object of type "histogram" 
    ## (or a list/df with $breaks and $density) 
    ## fillCol and lineCol... exactly what you think. 
    binWidth <- hist$breaks[2] - hist$breaks[1] 
    if (is.null(xscale)) xscale <- xwidth * 0.90/max(hist$density) 
    n <- length(hist$density) 
    x.l <- rep(x, n) 
    x.r <- x.l + hist$density * xscale 
    y.b <- hist$breaks[1:n] 
    y.t <- hist$breaks[2:(n + 1)] 

    rect(xleft = x.l, ybottom = y.b, xright = x.r, ytop = y.t, 
     col = fillCol, border = lineCol) 
} 



## Usage example 
require(plyr) ## Just needed for the round_any() in this example 
n <- 1000 
numberOfHists <- 4 
data <- data.frame(ReleaseDOY = rnorm(n, 110, 20), 
        bin = as.factor(rep(c(1, 2, 3, 4), n/4))) 
binWidth <- 1 
binStarts <- c(1, 2, 3, 4) 
binMids <- binStarts + binWidth/2 
axisCol <- "gray80" 

## Data handling 
DOYrange <- range(data$ReleaseDOY) 
DOYrange <- c(round_any(DOYrange[1], 15, floor), 
         round_any(DOYrange[2], 15, ceiling)) 

## Get the histogram obects 
histList <- with(data, tapply(ReleaseDOY, bin, hist, plot = FALSE, 
    breaks = seq(DOYrange[1], DOYrange[2], by = 5))) 
DOYmean <- with(data, tapply(ReleaseDOY, bin, mean)) 

## Plotting 
par(mar = c(5, 5, 1, 1) + .1) 
plot(c(0, 5), DOYrange, type = "n", 
    ann = FALSE, axes = FALSE, xaxs = "i", yaxs = "i") 

axis(1, cex.axis = 1.2, col = axisCol) 
mtext(side = 1, outer = F, line = 3, "Length at tagging (mm)", 
     cex = 1.2) 
axis(2, cex.axis = 1.2, las = 1, line = -.7, col = "white", 
    at = c(75, 107, 138, 169), 
    labels = c("March", "April", "May", "June"), tck = 0) 
mtext(side = 2, outer = F, line = 3.5, "Date tagged", cex = 1.2) 
box(bty = "L", col = axisCol) 

## Gridlines 
abline(h = c(60, 92, 123, 154, 184), col = "gray80") 

biggestDensity <- max(unlist(lapply(histList, function(h){max(h[[4]])}))) 
xscale <- binWidth * .9/biggestDensity 

## Plot the histograms 
for (lengthBin in 1:numberOfHists) { 
    VerticalHist(binStarts[lengthBin], xscale = xscale, 
         xwidth = binWidth, histList[[lengthBin]]) 
    } 

verticalhistograms

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