马赛克图标签显示不全,如何右移图表适配屏幕?
解决马赛克图标签被截断的问题
我明白你遇到的困扰——用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
相关产品推荐
相关产品推荐

