【发布时间】:2017-09-11 17:28:24
【问题描述】:
我正在尝试使用循环绘制一些图表。我现在详细描述。
首先我有一个计算 y 变量的函数(垂直轴称为 effect)
effect<- function (x, y){
exp(-0.35*log(x)
+0.17*log(y)
-0.36*sqrt(log(x)*log(y)/100))
}
现在我运行以下代码并使用 par 选项在同一张图中绘制线条。我使用axis=FALSE 和xlab="" 得到一个没有标签的情节。我这样做是为了在每次循环运行并且看起来很难看时不会重新编写我的标签。
for (levels in seq(exp(8), exp(10), length.out = 5)){
x = seq(exp(1),exp(10), length.out = 20)
prc= effect(levels,x)
plot(x, prc,xlim = c(0,max(x)*1.05), ylim=c(0.0,0.3),
type="o", xlab = "",ylab = "", pch = 16,
col = "dark blue", lwd = 2, cex = 1, axes = F)
label = as.integer(levels) #x variable
text(max(x)*1.03,max(prc), label )
par(new=TRUE)
}
最后,我这次使用xlab 和ylab 选项复制绘图命令
plot(x, prc, xlab = "X-label", ylab = "effect",
xlim = c(0,max(x)*1.05), ylim = c(0,0.3),
type="l", col ='blue')
我在类似的行中有几个其他的图,使用复杂的方程。我有两个问题:
- 是否有更好的选择来使用更平滑的线条绘制相同的图?
- 有没有更简单的选择,只需几行即可实现相同的效果,我可以将每行的文本(级别)放在右侧,背面为白色背景?
【问题讨论】:
-
当一个函数/方法已经存在时,命名一个变量是不好的形式。在您的 for 循环中,您使用“级别”作为迭代器。在基础 R 中已经有一个函数
levels()。你在第二个问题中要求什么?您是否希望标签“级别”位于右侧的轴上?据我所知,它们已经有白色背景,而您的text()似乎没有设置背景参数,所以您是在询问位置还是我看不到的色差?