R语言Mosaicplot中StrategischeWahl2021标签位置异常求助
R语言vcd包马赛克图变量标签位置异常问题解决
问题描述
使用vcd包的mosaic()函数绘制2021年策略性投票参与者(StrategischeWahl2021)与性别(Q2)的马赛克图时,StrategischeWähler2021的标签位置错误,但其他马赛克图绘制正常,需排查解决。
复现代码
mosaic(data = Test, ~Q2 + StrategischeWahl2021, direction = c("v", "h"), shade = TRUE, labeling_args = list(set_varnames = c(StrategischeWahl2021 = "StrategischeWähler2021", Q2 = "Geschlecht"), set_labels = list(StrategischeWahl2021 = c("Nein", "Ja")), rep = FALSE), gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
数据集
Test <- Test %>% select(Q2, StrategischeWahl2021) dput(Test) structure(list(Q2 = c("Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Nichtbinäres / Drittes Geschlecht", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Nichtbinäres / Drittes Geschlecht", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Nichtbinäres / Drittes Geschlecht", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Nichtbinäres / Drittes Geschlecht", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Keine Angabe", "Weiblich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Nichtbinäres / Drittes Geschlecht", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Weiblich", "Männlich", "Weiblich", "Männlich", "Männlich", "Weiblich", "Weiblich", "Männlich"), StrategischeWahl2021 = c("0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "1", "0", "0", "1", "0", "1", "1", "0", "0", "0", "1", "0", "0", "1", "0", "1", "1", "0", "0", "0", "0", "0", "1", "0", "0", "0", "1", "0", "1", "0", "1", "1", "0", "0", "1", "0", "0", "0", "0", "1", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "1", "0", "0", "0", "1", "1", "0", "0", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "0", "1", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", "1", "0", "0", "1", "0", "1", "0", "0", "0", "0", "0", "1", "0", "1", "1", "0", "1", "0", "0", "1", "0", "0", "0", "0", "1", "0", "1", "0", "1", "1", "1", "0", "0", "0", "0", "1", "0", "0", "0", "1", "0", "0", "0", "0", "1", "1", "0", "0", "0", "0")), row.names = 3:261, class = "data.frame")
解决方法
1. 修正变量标签顺序
set_varnames的顺序需要与公式中的变量顺序(Q2 + StrategischeWahl2021)一致,调整后代码:
mosaic(data = Test, ~Q2 + StrategischeWahl2021, direction = c("v", "h"), shade = TRUE, labeling_args = list(set_varnames = c(Q2 = "Geschlecht", StrategischeWahl2021 = "StrategischeWähler2021"), set_labels = list(StrategischeWahl2021 = c("Nein", "Ja")), rep = FALSE), gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
2. 转换变量为因子类型
将StrategischeWahl2021转换为因子,利用因子自带标签避免标签映射错误:
# 转换变量类型 Test$StrategischeWahl2021 <- factor(Test$StrategischeWahl2021, levels = c("0", "1"), labels = c("Nein", "Ja")) # 绘图(无需set_labels参数) mosaic(data = Test, ~Q2 + StrategischeWahl2021, direction = c("v", "h"), shade = TRUE, labeling_args = list(set_varnames = c(Q2 = "Geschlecht", StrategischeWahl2021 = "StrategischeWähler2021"), rep = FALSE), gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
3. 调整标签偏移量
如果标签仍错位,可在labeling_args中添加offset_varnames参数手动调整位置:
mosaic(data = Test, ~Q2 + StrategischeWahl2021, direction = c("v", "h"), shade = TRUE, labeling_args = list(set_varnames = c(Q2 = "Geschlecht", StrategischeWahl2021 = "StrategischeWähler2021"), set_labels = list(StrategischeWahl2021 = c("Nein", "Ja")), rep = FALSE, offset_varnames = c(1, 1.5)), # 垂直/水平标签的偏移量 gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
4. 更新vcd包
标签位置问题可能是旧版本bug,执行以下命令更新包后重试:
update.packages("vcd")
内容的提问来源于stack exchange,提问作者Mr. Draro
相关产品推荐
相关产品推荐

