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

  • FASHTAG

    FASHTAG

    5 EYLÜL 2012
  • funbro1

    funbro1

    11 Aralık 2007
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009