如何在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
相关产品推荐
相关产品推荐

