R语言绘图边框的单位
在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")
生成的图片如下:
从图中可以看出,通过这种方式指定边距,非常的精确,不多也不少,保证在所有情况下,都会显示出对应的边距
最新文章
- redis配置文件详解
- [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
- Android与JS之间跨平台异步调用
- PHP 小方法之 计算两个时间戳之间相差的日时分秒
- VS软件对应编号
- 设计模式值六大原则——接口隔离原则 (ISP)
- ob缓存
- Thinkphp 3.2中文章详情页的上一篇 下一篇文章功能
- 解决mysql不是内部或外部命令
- AppScan 扫描测试策略
- angular路由详解三(路由参数传递)
- Java NIO Channel to Channel Transfers通道传输接口
- windows下redis安装及配置
- Gym - 100851F - Froggy Ford(dijkstra)
- 手动安装vue-devtools
- BootStrap字体图标不显示、下拉菜单不显示
- java-方法重写和方法重载的区别
- menu 一组 只能选择一个
- Mysql 5.8安装报错
- vue中使用定时器时this指向问题
热门文章
- 【Android】8.4 让主题自适应不同的Android版本
- 【Android】3.21 示例21—兴趣点收藏功能
- 将一个4X4的数组进行逆时针旋转90度后输出,要求原数组数据随机输入
- ClickAndMoveTest
- configure new Linux/Mac
- 使用mybatisplus实现动态路由
- 也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
- 如何把高版本的sqlserver 还原到低版本的 sqlserver
- Web应用程序开发的标准架构
- JavaScript高级 面向对象(5)--最简单的继承方式,混入mix