在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")

生成的图片如下:

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

最新文章

  1. redis配置文件详解
  2. [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
  3. Android与JS之间跨平台异步调用
  4. PHP 小方法之 计算两个时间戳之间相差的日时分秒
  5. VS软件对应编号
  6. 设计模式值六大原则——接口隔离原则 (ISP)
  7. ob缓存
  8. Thinkphp 3.2中文章详情页的上一篇 下一篇文章功能
  9. 解决mysql不是内部或外部命令
  10. AppScan 扫描测试策略
  11. angular路由详解三(路由参数传递)
  12. Java NIO Channel to Channel Transfers通道传输接口
  13. windows下redis安装及配置
  14. Gym - 100851F - Froggy Ford(dijkstra)
  15. 手动安装vue-devtools
  16. BootStrap字体图标不显示、下拉菜单不显示
  17. java-方法重写和方法重载的区别
  18. menu 一组 只能选择一个
  19. Mysql 5.8安装报错
  20. vue中使用定时器时this指向问题

热门文章

  1. 【Android】8.4 让主题自适应不同的Android版本
  2. 【Android】3.21 示例21—兴趣点收藏功能
  3. 将一个4X4的数组进行逆时针旋转90度后输出,要求原数组数据随机输入
  4. ClickAndMoveTest
  5. configure new Linux/Mac
  6. 使用mybatisplus实现动态路由
  7. 也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
  8. 如何把高版本的sqlserver 还原到低版本的 sqlserver
  9. Web应用程序开发的标准架构
  10. JavaScript高级 面向对象(5)--最简单的继承方式,混入mix