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

马赛克图标签显示不全,如何右移图表适配屏幕?

解决马赛克图标签被截断的问题

我明白你遇到的困扰——用vcd包绘制马赛克图时,左侧的Road_Type标签被屏幕截断,尝试用par()调整边距却完全没效果。这其实是因为**mosaic()函数基于grid绘图系统,而par()只对base绘图系统生效**,所以调整par(mar)自然起不到作用。下面给你几个实用的解决方案:

方案1:直接在mosaic()中设置边距(最简便)

mosaic()函数本身提供了margin参数,可以直接控制绘图区域四周的边距(单位是lines)。你只需要给左侧留足够的空间来显示长标签即可:

# 先修正代码里的拼写错误:darlblue → darkblue
mos <- mosaic(~Road_Type + Accident_Severity_combined, 
              data = uk1, 
              shade = TRUE, 
              legend = TRUE, 
              # 关键:设置左边距为12行,其他边距按需调整
              margin = c(5, 12, 5, 5),
              labeling_args = list(
                set_varnames = c(Accident_Severity_combined="Gender", Road_Type="survival"), 
                highlighting_fill = c("darkblue","red"), 
                labeling=labeling_border( 
                  rot_labels = c(90, 0, 90, 0), 
                  just_labels=c("left","left","right","right"), 
                  tl_varnames = FALSE, 
                  gp_labels = gpar(fontsize = 9)
                )
              )
)

margin的顺序是c(下, 左, 上, 右),你可以根据标签长度调整左边的数值(比如12不够就改成15)。

方案2:用grid视口(Viewport)整体移动绘图区域

如果方案1不够灵活,你可以用grid系统的viewport来手动调整绘图区域的位置,把整个图表向右偏移,给左侧标签留出空间:

library(grid)

# 创建一个视口:x起始位置为0.15(左边留15%的空间),宽度占80%
pushViewport(viewport(x = 0.15, width = 0.8))

# 在这个视口里绘制马赛克图
mos <- mosaic(~Road_Type + Accident_Severity_combined, 
              data = uk1, 
              shade = TRUE, 
              legend = TRUE, 
              labeling_args = list(
                set_varnames = c(Accident_Severity_combined="Gender", Road_Type="survival"), 
                highlighting_fill = c("darkblue","red"), 
                labeling=labeling_border( 
                  rot_labels = c(90, 0, 90, 0), 
                  just_labels=c("left","left","right","right"), 
                  tl_varnames = FALSE, 
                  gp_labels = gpar(fontsize = 9)
                )
              )
)

# 关闭视口
popViewport()

这样整个图表会向右移动,左侧的空白区域就能完整显示标签了。

小提示:检查标签拼写

另外注意你代码里的highlighting_fill = c("darlblue","red")有个拼写错误,应该是darkblue,不然颜色会显示异常哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:07:04