Настройте ширину гистограммы на графике - PullRequest
2 голосов
/ 14 февраля 2020

Я использую пакет likert от jbryer и хочу визуализировать данные в виде столбчатых диаграмм. Размер / ширина этих столбчатых графиков зависит от того, сколько столбцов находится на графике, т. Е. Только с одним столбцом столбец довольно широкий, и чем тоньше, тем больше столбцов наносится.

Я бы хотел Стоит дорого установить размер / ширину столбца, чтобы они оставались одинаковыми, независимо от того, сколько столбцов нанесено на график, т.е. чтобы размер столбцов был одинаковым для графиков l29_5 и l29_2.

Likert bar plot with two bars

Likert bar plot with five bars

library(ggplot)
library(likert)    
data(pisaitems)

items29_5 <- pisaitems[,substr(names(pisaitems), 1,5) == 'ST25Q']
colnames(items29_5) <- c("Magazines", "Comic books", "Fiction", 
                    "Non-fiction books", "Newspapers")

items29_2 <-  items29_5 %>% 
  select("Magazines", "Comic books")


l29_5 <- likert(items29_5)
l29_2 <- likert(items29_2)

plot(l29_5)
plot(l29_2)

1 Ответ

1 голос
/ 30 марта 2020

Функция likert.bar.plot(..) не имеет параметров для ширины бункеров. Однако он возвращает объект класса ggplot, поэтому его можно обрабатывать с помощью стандартных инструкций ggplot2.
Окончательный график состоит из нескольких слоев ggplot. Проблема здесь не в том, чтобы добавить новую инструкцию или слой в график, а в том, чтобы обновить параметры для одного или нескольких внутренних слоев. А именно, нам нужно установить width для всех слоев, содержащих geom_bar(). Для этого мы сначала находим соответствующие слои:

p <- likert.bar.plot(l29_2)
p$layers

Из результатов видно, что geom_bar входит в слои 2 и 3. Затем мы можем изменить их, добавив width параметр:

p$layers[[2]]$geom_params$width = 0.3
p$layers[[3]]$geom_params$width = 0.3
p

likert plot with predefied bin widths

...