Перемещение таблицы, созданной annotation_custom с графиком geom_bar

Я пытался искать ответы, но ничего не нашел.

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

Можно ли переместить таблицу, созданную annotation_custom, если ось x дискретна? Если да, то как?

Благодарю вас!

Например, я хочу переместить эту таблицу.

library(ggplot2)
library(gridExtra)

my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))
ggplot(chickwts, aes(feed, weight)) +
       geom_bar(stat = "identity")  +
       annotation_custom(tableGrob(my.table))

person Michael    schedule 17.08.2014    source источник
comment
Пожалуйста, предоставьте небольшой воспроизводимый пример данных. Вам будет намного проще помочь вам получить желаемый результат.   -  person SimonG    schedule 18.08.2014
comment
сделано. спасибо за предложение   -  person Michael    schedule 18.08.2014


Ответы (1)


Пользовательскую аннотацию в ggplot2 можно изменить внутри области построения. Это, по крайней мере, отодвигает их от центра. Возможно, этого решения вам уже достаточно. Я постараюсь настроить это. Должна быть возможность разместить это за пределами области построения.

library(ggplot2)
library(gridExtra)

my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))
ggplot(chickwts, aes(feed, weight)) +
       geom_bar(stat = "identity")  +
       annotation_custom(tableGrob(my.table), xmin=5,xmax=6,ymin=300,ymax=1300)

ИЗМЕНИТЬ:

Для размещения таблицы вне графика, вне зависимости от того, из чего состоит график, можно использовать пакет grid:

library(ggplot2)
library(gridExtra)
library(grid)

# data
my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))

# plot items
my.tGrob <- tableGrob(my.table)
plt <- ggplot(chickwts, aes(feed, weight)) +
          geom_bar(stat = "identity")

# layout
vp.layout <- grid.layout(nrow=1, ncol=2, heights=unit(1, "null"),
  widths=unit(c(1,9), c("null","line")) )

# start drawing
grid.newpage()
pushViewport(viewport(layout=vp.layout, name="layout"))
# plot
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1, name="plot"))
print(plt, newpage=FALSE)
upViewport()
# table
pushViewport(viewport(layout.pos.row=1, layout.pos.col=2, name="table"))
grid.draw(my.tGrob)
upViewport()

#dev.off()

Быстрый PNG

person SimonG    schedule 17.08.2014
comment
интересный. Таким образом, в этом случае числа для значений x-min и x-max дискретны, а для y-min и y-man непрерывны. Однако изменение этих значений не перемещает таблицу на графике, с которым я работаю. :( - person Michael; 18.08.2014
comment
Обновлен мой ответ, чтобы включить решение по размещению таблицы (внутри/снаружи графика, не имеет значения) независимо от типа графика. Дайте мне знать, если это пойдет в правильном направлении. - person SimonG; 18.08.2014
comment
Для второго варианта может быть проще использовать grid.arrange Например, grid.arrange(plt, my.tGrob, ncol=2). Вы можете использовать аргумент widths для большего контроля над интервалами. - person user20650; 18.08.2014
comment
Это было бы менее сложно для моего примера. Я выбрал обычный пакет grid, потому что он также позволял бы размещать его внутри сюжета, если это необходимо. grid.arrange ограничен здесь размещением рядом друг с другом. - person SimonG; 18.08.2014
comment
Потрясающие. Спасибо SimonG за помощь. - person Michael; 19.08.2014