2016-08-05 6 views
1

Plot mit mehreren Facetten, die unterschiedliche Maßstäbe haben. Einfaches Beispiel:Facettenplots mit verschiedenen Yaxis-Skalen

require(data.table) 
require(ggplot2) 

nr <- 10000 
inp.dt <- rbind(
    data.table(type="A", month=sample(seq(as.Date("2011/1/1"), as.Date("2012/1/1"), by="month"), nr, replace=T)), 
    data.table(type="B", month=sample(seq(as.Date("2011/1/1"), as.Date("2012/1/1"), by="month"), 100*nr, replace=T)) 
) 
plot.dt <- inp.dt[, .(count=.N), .(type,month)] 

mnth <- sort(unique(plot.dt[["month"]])) 
plot.dt[, ":="(type=factor(type), month=factor(month, label=format(mnth, format="%Y-%b"), ordered=TRUE))] 

g <- ggplot(plot.dt, aes(x=month, y=count)) + 
    geom_bar(stat="identity") + expand_limits(y=0) + facet_grid(type~., scales="free_y") 
print(g) 

Wenn ich scales= die obere Facette entfernen wird uninteressant. Gibt es eine Möglichkeit, diese Informationen als Facetten (nicht auf getrennten Seiten) zu zeigen, während man immer noch den großen Unterschied in den Skalen vermittelt. Wie kann ich zB das ymax für die obere Facette nur auf eine höhere Zahl setzen?

+1

Ich glaube, Sie können dies mit 'GridExtra' tun. –

+1

'skalen = frei 'klingt wie der entsprechende Befehl. Wenn Sie die Grenzen für ein bestimmtes Panel steuern möchten, können Sie jederzeit eine Dummy-Ebene mit 'geom_blank()' hinzufügen – baptiste

Antwort

1

Ich bin nicht sicher, was Sie die Waage einstellen möchten, also habe ich nur einige Zahlen willkürlich gewählt.

require(data.table) 
require(ggplot2) 

nr <- 10000 
inp.dt <- rbind(
    data.table(type="A", month=sample(seq(as.Date("2011/1/1"), as.Date("2012/1/1"), by="month"), nr, replace=T)), 
    data.table(type="B", month=sample(seq(as.Date("2011/1/1"), as.Date("2012/1/1"), by="month"), 100*nr, replace=T)) 
) 
plot.dt <- inp.dt[, .(count=.N), .(type,month)] 

mnth <- sort(unique(plot.dt[["month"]])) 
plot.dt[, ":="(type=factor(type), month=factor(month, label=format(mnth, format="%Y-%b"), ordered=TRUE))] 

# g <- ggplot(plot.dt, aes(x=month, y=count)) + 
# geom_bar(stat="identity") + expand_limits(y=0) + facet_grid(type~., scales="free_y") 
# print(g) 

g1 <- ggplot(plot.dt[plot.dt$type=="A",], aes(x=month, y=count)) + scale_y_continuous(limits=c(0,1500))+ 
    geom_bar(stat="identity") + expand_limits(y=0) #+ facet_grid(type~., scales="free_y") 
print(g1) 

g2 <- ggplot(plot.dt[plot.dt$type=="B",], aes(x=month, y=count)) + scale_y_continuous(limits=c(0,800000))+ 
    geom_bar(stat="identity") + expand_limits(y=0) #+ facet_grid(type~., scales="free_y") 
print(g2) 


install.packages("gridExtra") 
library(gridExtra) 
gA <- ggplotGrob(g1) 
gB <- ggplotGrob(g2) 


p <- arrangeGrob(
    gA, gB, nrow = 2, heights = c(0.80, 0.80)) 

plot(p)