边缘的在水平条形图自动调整(Automatic adjustment of margins in h

2019-06-24 05:48发布

我需要制作一系列水平分组柱状图。 该barplot功能不会自动调整情节的边缘,因此文本被切断。

  graphics.off()      # close graphics windows
   test <- matrix(c(55,65,30, 40,70,55,75,6,49,45,34,20), 
                  nrow =3 , 
               ncol=4, 
               byrow=TRUE,
               dimnames = list(c("Subgroup 1", "Subgroup 2", "Subgroup 3"),
                               c(
                                 "Category 1 Long text",
                                 "Category 2 very Long text",
                                 "Category 3 short text",
                                 "Category 4 very short text"
                                 )))
  barplot(test, 
       las=2,
       beside = TRUE,
       legend=T,
       horiz=T)

我无法找到一个选项来自动移动进一步的阴谋权,渠道 - dotchart函数做它((在SAS条形图程序调整页边距,并自动完成)。很明显,我可以随时调整页边距使用参数手动功能。

  par(mar=c(5.1, 13 ,4.1 ,2.1))

将情节向右移动

是否有移动绘图到右侧的选项会自动根据文本的长度(即调整页边距)?

我能想到的2个相关appproaches以编程方式做到这一点:1)计算最长的文本字符串的长度并相应调整留有余量2)创建一个用于数据的dotchart情节,莫名其妙地捕捉到利润率和使用条形图相同的利润。

是否有更简单的方法来做到这一点? 谢谢!

Answer 1:

我想你的第一个想法可能是最合适的。 像这样的东西似乎工作很好,而且要求没有太多馅的。

ylabels <-  c(  "1oooooooooooo",
            "2",
            "3",
            "4"
)

test <- matrix(c(55,65,30, 40,70,55,75,6,49,45,34,20), 
                  nrow =3 , 
               ncol=4, 
               byrow=TRUE,
               dimnames = list(c("Subgroup 1", "Subgroup 2", "Subgroup 3"),
                               ylabels))

# adjust to the maximum of either the default 
# or a figure based on the maximum length
par(mar=c(5.1, max(4.1,max(nchar(ylabels))/1.8) ,4.1 ,2.1))

barplot(test, 
       las=2,
       beside = TRUE,
       legend=T,
       horiz=T)

检查后dotchart ,更普遍意义的解决方案也可能是使用:

linch <-  max(strwidth(ylabels, "inch")+0.4, na.rm = TRUE)
par(mai=c(1.02,linch,0.82,0.42))


文章来源: Automatic adjustment of margins in horizontal bar chart