R vcd::mosaic重叠标签问题

4
我正在使用vcd::mosaic生成镶嵌图。但是我得到的因子文本非常长(不能裁剪它们,而且有这么多实例,引入\n似乎很困难),因此文本重叠,并且我无法强制标签垂直于轴。这是我的尝试:
a <- data.frame(x=sample(LETTERS[1:4],16,replace = TRUE), 
                y=rep(paste("very long label here at number", 1:4, paste=" "), 4))
mosaic(y ~ x, data= a, las= 2)

但我得到的是这样的结果:enter image description here 我还尝试了 par(las= 2)par(las= 3),但这两种方法都不能强制将它们垂直对齐(不过,las= 2 在使用 mosaicplot 时很有效。似乎 vcd::mosaic 覆盖了 las 参数,要么是作为给定参数,要么是作为 par 的默认设置。我也尝试过使用 par(mar),但标签的长度足以使这个解决方法失败。
我该怎么做才能得到可读的标签?
########## 编辑添加: ##########
我也尝试了这个方法,但无济于事:
mosaic(y ~ x, data= a, labeling_list= list(gp_text= gpar(las= 2)))

并且

mosaic(y ~ x, data= a, labeling_list= list(rot_labels = c(0,90,0,0)))
  # Actually placed the "90" in the 4 positions

mosaic(y ~ x, data= a, labeling_list= list(rot_varnames = c(0,90,0,0)))

如果符合您的要求,您可以尝试使用rep(paste("very long label\n here at number\n", 1:4, paste=" "), 4) - user3710546
Pascal,感谢您的评论,但正如我在问题中所述,数据比可重现的示例要多得多(而且更加复杂),因此输入\n将非常麻烦。我想知道如何旋转标签:'( - PavoDive
我认为旋转标签不是一个好的解决方案。 - user3710546
@Pascal,马赛克图中的一些标签面积非常小,这意味着它们相当拥挤。即使我将每个字符串分割为5个字符,它们仍会重叠在一起。我知道您不喜欢旋转标签,但您能否向我展示如何实现?谢谢! - PavoDive
对不起,但是你误解了我的意思。 - user3710546
2个回答

13

终于找到了!关键搜索文档:

?labelings
?labeling_border

为了旋转标签

mosaic(y ~ x, 
       data= a, 
       labeling= labeling_border(rot_labels = c(90,0,0,0), 
                                 just_labels = c("left", 
                                                 "center", 
                                                 "center", 
                                                 "center")))

-2

试试这个:

+ theme(axis.text.x=element_text(angle=-25, hjust= .1))

它将旋转标签25度(您只需复制并粘贴即可)


我不理解 - 把这个剪切复制到哪里? - Sciolism Apparently
这个评论与ggplot生态系统相关,但vcd使用网格图形(因此这些信息不适用于vcd)。 - helmingstay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接