SORU
8 Kasım 2012, PERŞEMBE


sola Hizala iki grafik kenarları (ggplot)

Ggplot kullanarak ve üst üste görüntülemek için istediğim iki grafik var. GridExtra grid.arrange onları yığını için kullandım. Sorun grafiklerin sol kenarları gibi sağ kenarları ne olursa olsun eksen etiketleri hizalamak istiyorum. (sorun bir grafik etiketleri Diğer Uzun iken kısa olmasından kaynaklanıyor).

Soru:
Bunu nasıl yapabilirim? Izgara evli değilim.ama ggplot2 bir zorunluluktur düzenlemek.

Denedim ne var:
Denedim oynayan genişlikleri ve Yükseklikleri gibi ncol ve nrow yapmak için 2 x 2 ızgara ve yere görseller ters köşeler ve daha sonra play ile genişlikleri ama bulamadım görseller ters köşe.

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant))   geom_bar()  coord_flip() 
B <- ggplot(CO2, aes(x=Type))   geom_bar()  coord_flip() 
grid.arrange(A, B, ncol=1)

enter image description here

CEVAP
8 Kasım 2012, PERŞEMBE


Bu deneyin

 gA <- ggplotGrob(A)
 gB <- ggplotGrob(B)
 maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
 gA$widths[2:5] <- as.list(maxWidth)
 gB$widths[2:5] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

Edit

İşte alternatif bir çözüm gtable:::rbind_gtable ve araziler rastgele bir sayı için ** 7, modifiye edilmiş bir sürümünü kullanıyor.

rbind_gtable_max <- function(...){

  gtl <- list(...)
  stopifnot(all(sapply(gtl, is.gtable)))
  bind2 <- function (x, y) 
  {
    stopifnot(ncol(x) == ncol(y))
    if (nrow(x) == 0) 
      return(y)
    if (nrow(y) == 0) 
      return(x)
    y$layout$t <- y$layout$t   nrow(x)
    y$layout$b <- y$layout$b   nrow(x)
    x$layout <- rbind(x$layout, y$layout)
    x$heights <- gtable:::insert.unit(x$heights, y$heights)
    x$rownames <- c(x$rownames, y$rownames)
    x$widths <- grid::unit.pmax(x$widths, y$widths)
    x$grobs <- append(x$grobs, y$grobs)
    x
  }

  Reduce(bind2, gtl)
}

cbind_gtable_max <- function(...){

  gtl <- list(...)
  stopifnot(all(sapply(gtl, is.gtable)))
  bind2 <- function (x, y) 
  {
    stopifnot(nrow(x) == nrow(y))
    if (ncol(x) == 0) 
      return(y)
    if (ncol(y) == 0) 
      return(x)
    y$layout$l <- y$layout$l   ncol(x)
    y$layout$r <- y$layout$r   ncol(x)
    x$layout <- rbind(x$layout, y$layout)
    x$widths <- gtable:::insert.unit(x$widths, y$widths)
    x$colnames <- c(x$colnames, y$colnames)
    x$heights <- grid::unit.pmax(x$heights, y$heights)
    x$grobs <- append(x$grobs, y$grobs)
    x
  }
  Reduce(bind2, gtl)
}

grid.draw(rbind_gtable_max(gA, gB))

(değişiklik sadece gtable şu anda unit.pmax adet bileşik) bazı türleri karşılaştırmak için başarısız çünkü gerekli olduğunu unutmayın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • wwjoshdu

    wwjoshdu

    18 ŞUBAT 2011