自定义 Likert 图中条形图的宽度

Tor*_*oro 5 plot r ggplot2 likert

我正在使用jbryer 的Likert 包,并希望使用堆积条形图来可视化数据。这些条形图的大小/宽度取决于图中有多少个条形图,即只有一个条形图时,条形图相当宽,而绘制的条形图越多,条形图就越细。

我想自定义设置条形的大小/宽度,以便无论图中绘制了多少个条形,它们都保持不变,即 l29_5 和 l29_2 的图的条形大小相同。

具有两个条形的李克特条形图

具有五个条形的李克特条形图

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)
Run Code Online (Sandbox Code Playgroud)

小智 4

该函数likert.bar.plot(..)没有任何有关 bin 宽度的参数。但是,它返回一个 class 对象ggplot,以便可以使用标准 ggplot2 指令对其进行处理。
最终的图由几个 ggplot 层组成。这里的问题不是向图中添加新的指令或层,而是更新一个或多个内层的参数。width也就是说,我们需要为所有包含 的图层设置geom_bar()。为此,我们首先找到相关层:

p <- likert.bar.plot(l29_2)
p$layers
Run Code Online (Sandbox Code Playgroud)

从输出中可以看出,geom_bar包含在第2层和第3层中。然后我们可以通过添加width参数来修改它们:

p$layers[[2]]$geom_params$width = 0.3
p$layers[[3]]$geom_params$width = 0.3
p
Run Code Online (Sandbox Code Playgroud)

具有预定义 bin 宽度的 Likert 图