【问题标题】:Customize width of bar plot in likert plot在李克特图中自定义条形图的宽度
【发布时间】:2020-02-14 18:26:46
【问题描述】:

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

我想自定义设置条的大小/宽度,以便它们保持不变,无论图中绘制了多少条,即条大小对于 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)

【问题讨论】:

  • plot.likert 函数无法对此进行控制,这是控制环境中画布大小的问题。如果您在 r-markdown 文档中呈现它,您可以根据您在该图中有多少问题为代码块 programmatically 设置 fig.height。它应该是相对线性的,即mx+b,其中b 是由于x 轴和图例而导致的恒定高度,m 是per-likert 高度。

标签: r ggplot2 plot likert


【解决方案1】:

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

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

【讨论】:

  • 谢谢!你知道如何减少物品(条)之间的距离吗?
  • @kaiya,条形之间的距离是根据视口的比例自动计算的。作为一种解决方法,我建议在缩放或导出图像时手动调整纵横比以获得所需的距离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 2013-07-11
  • 2013-03-01
  • 1970-01-01
相关资源
最近更新 更多