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

  • colacas

    colacas

    29 EKİM 2006
  • Shylo Sharity

    Shylo Sharit

    27 EKİM 2011
  • warningthepeople

    warningthepe

    21 EYLÜL 2011