You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除Likert图两侧白色边距并优化百分比显示

Likert量表堆叠直方图的调整方案

针对你遇到的列标签未读取、两侧白边过大、左侧百分比位置不佳的问题,直接给你具体的代码调整方法:

1. 让likert包读取列标签

likert包默认用数据框的列名作为问题标签,确保你的数据框列名是对应的问题文本,并且在创建likert对象时明确指定items参数:

# 假设你的调查数据框名为survey_data,列名是各Likert问题
library(likert)
# 先把所有回答列转换为因子(必须指定Likert层级顺序)
survey_data[] <- lapply(survey_data, factor, 
                        levels = 1:5,  # 替换成你的量表层级数字
                        labels = c("非常不同意", "不同意", "中立", "同意", "非常同意"))  # 替换成你的选项文本

# 创建likert对象,items参数传入带列名的回答列
likert_obj <- likert(items = survey_data)

此时绘图会自动用列名作为左侧的问题标签,如果还是不显示,检查列名是否被误设为默认的V1/V2,重新设置列名即可。

2. 消除图表两侧的白色边距

likert的绘图基于ggplot,直接通过coord_flip()调整x轴范围,再配合plot.margin缩小整体边距:

# 基础绘图
p <- plot(likert_obj, text.position = "outside")

# 调整边距+压缩x轴空白
p <- p +
  theme(plot.margin = margin(3, 3, 3, 3, "pt")) +  # 上下左右边距,数值越小边距越窄
  coord_flip(xlim = c(-102, 102))  # 适配-100%到100%的范围,±2的缓冲避免文本被截断

3. 优化左侧百分比的位置

默认左侧(负向百分比)的文本可能过于贴近柱子,通过手动调整文本的hjust和x轴偏移来优化:

# 移除原有左侧文本,避免重复
p$layers[[2]] <- NULL

# 添加自定义位置的左侧百分比文本
p <- p +
  geom_text(
    data = subset(p$data, value < 0),  # 只选负向(左侧)的百分比
    aes(x = x - 0.1, y = y, label = paste0(abs(value), "%")),
    hjust = 1,  # 文本右对齐,贴近柱子左侧
    size = 3.5,  # 可调整文本大小
    inherit.aes = FALSE
  )

完整示例代码

# 模拟带列名的Likert数据
survey_data <- data.frame(
  "产品满意度" = sample(1:5, 150, replace = TRUE),
  "功能易用性" = sample(1:5, 150, replace = TRUE),
  "售后服务质量" = sample(1:5, 150, replace = TRUE)
)

# 转换为因子
survey_data[] <- lapply(survey_data, factor,
                        levels = 1:5,
                        labels = c("非常不同意", "不同意", "中立", "同意", "非常同意"))

# 创建likert对象
library(likert)
likert_obj <- likert(items = survey_data)

# 绘图+调整
p <- plot(likert_obj, text.position = "outside") +
  theme(
    plot.margin = margin(3, 3, 3, 3, "pt"),
    legend.title = element_text(size = 10)
  ) +
  coord_flip(xlim = c(-102, 102))

# 替换左侧百分比文本位置
p$layers[[2]] <- NULL
p <- p +
  geom_text(
    data = subset(p$data, value < 0),
    aes(x = x - 0.1, y = y, label = paste0(abs(value), "%")),
    hjust = 1,
    size = 3.5,
    inherit.aes = FALSE
  )

print(p)

内容的提问来源于stack exchange,提问作者Michael Marx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:21