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

如何在R中修改ggplot图表中数值型因子的显示名称?

解决方法

你可以通过两种实用方式实现分类标签的替换,都是tidyverse生态下的便捷方案:

方法一:在数据处理阶段重编码因子水平

直接在mutate中使用forcats::fct_recode(tidyverse已包含该包)修改RECUERDO的因子标签,后续所有用到该变量的操作都会自动使用新标签:

library(tidyverse)
library(haven)
library(labelled)

CIS = read_spss("CISData.sav") %>%
  mutate(
    RECUERDO = to_factor(RECUERDO) %>%
      fct_recode(
        "Unidas Podemos" = "21",
        "PSOE" = "2",
        "Ciudadanos" = "4",
        "PP" = "1",
        "VOX" = "18"
      )
  )

include = c("Unidas Podemos", "PSOE", "Ciudadanos", "PP", "VOX") # 这里要对应新标签

Voters <- ggplot(CIS %>% filter(RECUERDO %in% include), aes(x = RECUERDO)) +
  geom_bar(fill = "Brown") +
  xlab("Voting Preference in 2019 Spanish General Elections") +
  ylab("Count")

Voters

方法二:仅在绘图时替换x轴显示标签

如果不想修改原始数据的因子水平,只需在ggplot中添加scale_x_discrete指定标签映射即可:

library(tidyverse)
library(haven)
library(labelled)

CIS = read_spss("CISData.sav") %>%
  mutate(
    RECUERDO = to_factor(RECUERDO))

include = c(21, 2, 4, 1, 18)

Voters <- ggplot(CIS %>% filter(RECUERDO %in% include), aes(x = RECUERDO)) +
  geom_bar(fill = "Brown") +
  xlab("Voting Preference in 2019 Spanish General Elections") +
  ylab("Count") +
  scale_x_discrete(
    labels = c(
      "1" = "PP",
      "2" = "PSOE",
      "4" = "Ciudadanos",
      "18" = "VOX",
      "21" = "Unidas Podemos"
    )
  )

Voters

为什么之前的方法没生效?

setNames/set_names是给向量添加名称属性,但你的RECUERDO是因子类型,它的显示标签由levels(因子水平)决定,而非向量的名称。所以需要针对因子的水平进行修改,而非给向量命名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:05:31