11

Вопрос по ggplot2, r – Как отображать метки полос под графиком при огранке?

Кажется, что полосы всегда выше сюжета, созданногоggplot2, Могут ли они быть перемещены ниже сюжета?

Например:

library(ggplot2) 
qplot(hwy, cty, data = mpg) + facet_grid( . ~ manufacturer)

отображает информацию об автомобиле сверху. Могут ли они отображаться быть внизу?

  • Error: User Rate Limit ExceededaboveError: User Rate Limit Exceededgt = gtable_add_grob(gt, stripGrob, t = max(panels$b) + 1, l = min(panels$l), r = max(panels$r))Error: User Rate Limit Exceeded

    от
  • Подобный вопрос был задан в списке рассылки ggplot когда-то.See here

    от Sandy Muspratt
  • Спасибо!!! Я не понимал, что это было так сложно

    от Max C
  • Смотрите также:stackoverflow.com/questions/3261597/… (еще один негативный ответ)

    от Ben Bolker
  • 7

    Update: С помощьюggplot2 версия 2.1.0, рассмотрите возможность использованияswitch = 'x', Увидеть?facet_grid для деталей.

    С помощьюgtable функции, легко переместить полосу. (Или посмотриВот для другой версии - замена оси X и полосы)

    library(ggplot2)
    library(gtable)
    library(grid)
    
    p <- ggplot(mpg, aes(hwy, cty)) + geom_point() + facet_grid( . ~ manufacturer) +
         theme(strip.text.x = element_text(angle = 90, vjust = 1),
               strip.background = element_rect(fill = NA))
    
    # Convert the plot to a grob
    gt <- ggplotGrob(p)
    
    # Get the positions of the panels in the layout: t = top, l = left, ...
    panels <-c(subset(gt$layout, grepl("panel", gt$layout$name), select = t:r))
    
    # Add a row below the x-axis tick mark labels,
    # the same height as the strip
    gt = gtable_add_rows(gt, gt$height[min(panels$t)-1], max(panels$b) + 2)
    
    # Get the strip grob
    stripGrob = gtable_filter(gt, "strip-t")
    
    # Insert the strip grob into the new row
    gt = gtable_add_grob(gt, stripGrob, t = max(panels$b) + 3, l = min(panels$l), r = max(panels$r))
    
    # remove the old strip
    gt = gt[-(min(panels$t)-1), ]
    
    grid.newpage()
    grid.draw(gt)
    

    enter image description here