ggplot facet_wrap_paginate страницы, сгруппированные по переменным - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю над созданием некоторых участков для сбора бумаги и немного спотыкаюсь о коде.Я воссоздал важные фрагменты, используя «бриллианты», чтобы людям было проще воссоздать

Часть 1

Цель состоит в том, чтобы создать гистограмму, которая будетнесколько переменных, например, «карат» и «цвет», так как они будут выступать в качестве заголовков для графиков.Я использовал pginate ggforce, чтобы позволить мне распределить его по нескольким страницам, так как я хотел бы, чтобы каждая страница показывала результаты по группам - здесь я добавил значения «1», «2» или «3» для каждойстрока кадра данных.Несмотря на то, что я мог бы установить подкадр данных и создавать графики по отдельности, проблема в том, что ширина полос не совпадает между страницами, даже когда я добавляю width = x к geom_bar (хотя ширина для каждой страницы одинакова).

Кто-нибудь знает, как мне это сделать?Мне было интересно, поможет ли aes_string, но я не был уверен, что он будет работать с несколькими нужными мне фасетами.

Часть 2 Когда я пытаюсь добавить код для сохранения изображенийон переопределяет команду grid.arrange ..., чтобы указать размер графика (чтобы они все были согласованы) и корректируется, чтобы заполнить пустое пространство.Это легко исправить?

Спасибо, Кэл

library(ggplot2)
library(ggforce)
library(plyr)
library(dplyr)
library(grid)
library(egg)

df = diamonds
df$Group<- rep(1:3,length.out=nrow(df))

for (i in df$Group) {

  p <- ggplot(data=df, aes(x=cut, y=clarity, fill=price)) +
    # preserve = single keeps all bars same width, rather than adjusting to 
    # the space
    geom_bar(position=position_dodge2(preserve = 'single'),
             stat="identity", color = "black", size = 0.2) + 
    # paginate allows the chart to be printed on multiple pages
    # strip position adds facet title to top of page
    facet_wrap_paginate(c("carat","color"), ncol = 3, nrow = 3,
                        scales = "fixed", strip.position = "top", page = i)


  # manually adjust the size of the plot panels
  grid.arrange(grobs = lapply(
    list(p),
    set_panel_size,
    width = unit(8,"cm"),
    height = unit(5,"cm")
  ))
}
...