• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言绘图边框的单位

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在R语言中指定画图边框时,通常使用两种单位, lines 和 inches

当然,这两个单位之间是可以相互转换的,那么 1 inch = ? line

答案是1 inches = 5 lines

下面给出具体的分析过程:

par 函数中有两个参数,返回的是margin的宽度,只不过单位不同:

mar : 返回边框的宽度, 返回值的单位为 lines 

mai: 返回边框的宽度, 返回值的单位为 inches

看下二者的返回值

> par("mar")
[1] 5.1 4.1 4.1 2.1
> par("mai")
[1] 1.02 0.82 0.82 0.42

因为二者返回的是同一个东西, 1.02 inches = 5.1 lines, 

所以 1inch =  5 line 

明白了不同单位之间的转换比之后,如何利用这些信息,准确的指定边距呢?

看下面这个场景,在图片的右侧通过mtext 添加了一个字符串,但是字符串太长了,所以没显示全

为了显示绘图区域的范围,我用box 画出了对应的边框,从图中可以看到,因为坐标系和绘图边框之间的距离(也就是margin) 太窄了,所以文字没显示完整

为了让文字完整显示,需要将右侧的margin调大一点,我们知道,默认的margins = c(5, 4, 4, 2) + 0.1 lines ,最直接的方式就是把右侧对应的数值调大一点,代码如下:

par(oma = c(1,1,1,1), mar = c(5.1, 4.1, 4.1, 5.5))
plot(1:5, 1:5, type = "n")
mtext(side = 4, "metagenome", las = 1)
box(which = "inner")

调整完之后,效果图如下:

上述的方法存在的一个问题就是,我需要不断尝试不同的值,直到满足要求为止,而且不能够精确的控制所需边框的宽度,那么有没有解决方案呢?

在R语言中,有strwidth 和 strheight 两个函数,用来计算一个字符串所占的宽度和长度,返回的长度可以自已选择

通过strwidth 计算出 "metagenome" 这个字符所占的宽度,然后将对应的margin 设置成这个值就可以了

a <- strwidth("metagenome", units = "inches", cex = 1)
right_margin <- 5 * a
par(oma = c(1,1,1,1), mar = c(5.1, 4.1, 4.1, right_margin))
plot(1:5, 1:5, type = "n")
mtext(side = 4, "metagenome", las = 1)
box(which = "inner")

生成的图片如下:

从图中可以看出,通过这种方式指定边距,非常的精确,不多也不少,保证在所有情况下,都会显示出对应的边距


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
机器学习中的EM算法具体解释及R语言实例(1)发布时间:2022-07-18
下一篇:
R语言函数参数的局部匹配验证(match.arg)发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap