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

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010
  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011