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)
CEVAP
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
Ve R Şekil pencerede birleştirmek teme...
Ruby on Rails web uygulama grafik oluş...
Nasıl Çekirdekli Grafik / Kuvars 2D yu...
Kod resimsel işlev çağrısı bir grafik ...
Yeni asp.net grafik kontrolleri - MVC ...