2015-11-13 30 views
3

我有一個功能grid.arrange的問題。我想繪製數據集的箱形圖,並用最小值,平均值,中值和最大值繪製一張數據表。我收到以下錯誤消息:nrow * ncol> = n不是TRUE。這裏是我的代碼:R grid.arrange:nrow * ncol> = n不是TRUE

df.plot <- ggplot((Boxplot_Flaechenpotential_2_2),  aes(x=GMDKLASSE,y=Flaeche)) + 
    ylab("Flächenpotential (1000m2)") + xlab(" ") + 
    geom_boxplot() + theme_bw() + 
    ggtitle(" ") + 
    theme(plot.title = element_text(lineheight=.8, face="bold"), 
    axis.line = element_line(colour = "black"), 
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    panel.background = element_blank()) 


lab.df<-data.frame(lab1=c("Kleine Gemeinde","Mittlere Gemeinde","Grosse Gemeinde"), 
       lab2=c("1","2","38"), 
       lab3=c("55","78","176"), 
       lab4=c("67","96","233"), 
       lab5=c("214","443","1042")) 

lab.df$lab1 <- factor(lab.df$lab1, levels=lab.df$lab1) 
lab.df$lab2 <- factor(lab.df$lab2, levels=lab.df$lab2) 
lab.df$lab3 <- factor(lab.df$lab3, levels=lab.df$lab3) 
lab.df$lab4 <- factor(lab.df$lab4, levels=lab.df$lab4) 
lab.df$lab5 <- factor(lab.df$lab5, levels=lab.df$lab5) 

df.table1 <- ggplot(lab.df, aes(x = lab1, y = 0, 
          label = lab1)) + 
    geom_text(size = 4.5, colour = "black") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = " ") + 
    theme(panel.grid.major = element_blank(), legend.position = "none", 
    panel.border = element_blank(), axis.text.x = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_text(angle = 0, hjust = 1.2)) 

df.table2 <- ggplot(lab.df, aes(x = lab2, y = 0, 
          label = lab2)) + 
    geom_text(size = 4.5, colour = "black") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Tiefster Wert")+ 
    theme(panel.grid.major = element_blank(), legend.position = "none", 
    panel.border = element_blank(), axis.text.x = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_text(angle = 0, hjust = 3.0)) 

df.table3 <- ggplot(lab.df, aes(x = lab3, y = 0, 
          label = lab3)) + 
    geom_text(size = 4.5, colour = "black") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Mittelwert")+ 
    theme(panel.grid.major = element_blank(), legend.position = "none", 
    panel.border = element_blank(), axis.text.x = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_text(angle = 0, hjust = 3.0)) 

df.table4 <- ggplot(lab.df, aes(x = lab4, y = 0, 
          label = lab4)) + 
    geom_text(size = 4.5, colour = "black") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Median")+ 
    theme(panel.grid.major = element_blank(), legend.position = "none", 
    panel.border = element_blank(), axis.text.x = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_text(angle = 0, hjust = 3.0)) 

df.table5 <- ggplot(lab.df, aes(x = lab5, y = 0, 
          label = lab5)) + 
    geom_text(size = 4.5, colour = "black") + 
    theme_minimal() + 
    scale_y_continuous(breaks=NULL, name = "Höchster Wert")+ 
    theme(panel.grid.major = element_blank(), legend.position = "none", 
    panel.border = element_blank(), axis.text.x = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title.x=element_blank(), 
    axis.title.y=element_text(angle = 0, hjust = 3.0)) 

gA <- ggplotGrob(df.plot) 
gB <- ggplotGrob(df.table1) 
gC <- ggplotGrob(df.table2) 
gD <- ggplotGrob(df.table3) 
gE <- ggplotGrob(df.table4) 
gF <- ggplotGrob(df.table5) 

maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3],   gC$widths[2:3], gD$widths[2:3], gE$widths[2:3], gF$widths[2:3]) 
gA$widths[2:3] <- as.list(maxWidth) 
gB$widths[2:3] <- as.list(maxWidth) 
gC$widths[2:3] <- as.list(maxWidth) 
gD$widths[2:3] <- as.list(maxWidth) 
gE$widths[2:3] <- as.list(maxWidth) 
gF$widths[2:3] <- as.list(maxWidth) 

grid.arrange(gA, gB, gC, gD, gE, gF, ncol=1, heights=c(5, 0.6, 0.6)) 

關於如何解決這個問題的任何想法?謝謝你幫助我!

回答

2

我可以重現錯誤如下:

library(gridExtra) 
library(grid) 
grid.arrange(rectGrob(), rectGrob(), rectGrob(), ncol = 1, heights = c(1, 2)) 
#Error: nrow * ncol >= n is not TRUE 

它很容易固定,通過指定每個情節的高度:

grid.arrange(rectGrob(), rectGrob(), rectGrob(), ncol = 1, heights = c(1, 2, 3)) 

或者你也可以設置ncol = 2

+0

你是絕對正確的,解決了這個問題。非常感謝你! – Jadabu

+0

是的,正如消息所示,雖然簡潔,但如果使用高度參數,它需要與佈局中的行數相對應。如果你忽略ncol,它會計算出三列所需的列數。 – baptiste

相關問題