2012-11-11 9 views
6

Dikey histogram yapmak istiyorum. İdeal olarak, günde tek bir arsaya çoklu konabilmem gerekir. Bu, quantmod deneysel chart_Series veya büyük bir zaman dizisi için çubukları çizebilen başka bir kütüphaneyle birleştirilebilirse, bu yeterli olabilirdi. Lütfen ekli ekran görüntüsüne bakın. İdeal olarak böyle bir şey çizebilirim.Dikey Histogram

Bu konuda yardımcı olabilecek herhangi bir kütüphane var mı, var olan kütüphaneler var mı?

Market Profile Example

cevap

1

o zaman bunları ve döndürülmüş görüntü alanına arsa istedikleri yere döndürülmüş viewports oluşturabilir ızgara grafikleri kullanın. Sadece ızgara grafiklerini belirli bir görünüm alanına çizecek bir işleve ihtiyacınız var, bunun için ggplot2 veya muhtemelen kafes öneririm.

Temel grafiklerde, döndürülmüş histogramı çizmek için kendi işlevinizi yazabilirsiniz (plot.histogram işlevini değiştirin veya yalnızca rect veya diğer araçlarla kendi sıranızı yazın). Ardından, daha büyük bir arsa üzerinde istediğiniz yere yerleştirmek için TeachingDemos paketinden subplot işlevini kullanabilirsiniz.

3

Kemanlar istediğiniz kadar yakın olabilir. Bunlar, bir kutunun bir hibriti ve bir yoğunluk grafiği gibi, bir eksen boyunca yansıtılmış olan yoğunluk çizimleridir. (Açıklama daha örnekle anlayışına çok daha kolay :-).) Burada

bunlardan ggplot2 uygulamasının basit (biraz çirkin) örnektir:

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

bir güzel örnek olur be:

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

Satır yerine veya buna ek olarak aralıkları eklemek için geom_linerange veya geom_pointrange kullanırsınız.

9

Temel grafiklerde dikey histogram yapmak için bir yıl önce yazdım. İşte bir kullanım örneği ile.

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