我正在创建一个简单的图表,它使用一个绘图函数调用另一个绘图函数来添加平滑线。第二个函数是
lines()
,它需要一些标准的基本图形参数。第一个函数也使用了同名参数。现在我想改变第二个图的一些元素,而不改变第一个图。我至少可以想到以下几种选择:
- 分别绘制每个图
- 重写函数以包含唯一命名的参数,以传递给第二个绘图函数
- 为此创建一个新的绘图函数,可能使用ggplot2
我开始思考,是否有可能在不重写任何内容的情况下,将参数值传递给嵌套函数。请注意,在这个问题中,我不是要求编写一个绘图函数 - 我可以根据需要自己编写,我是在问是否可以在traceplot
的参数列表中指定一个参数,只有当它也是traceplot的命名参数时才会传递给lines
。例如:
require(coda)
require(geoRglm)
# Some example data
mcmc <- c(0, 0, 0, 0, 0.5, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.5,
0.5, 1, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0.5, 0.5, 0, 0.5, 1, 0, 0.5, 1, 0.5, 0.5, 0.5, 0, 0.5, 0.5,
0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0.5, 0, 0, 0,
0.5, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0.5, 1, 1, 0, 1, 0,
0, 0.5, 0, 0.5, 0.5, 0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.5, 0, 1, 0.5,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5,
1.5, 1, 1.5, 1, 1, 1, 1, 0.5, 0.5, 1, 1, 1.5, 1.5, 1.5, 1, 1.5,
1.5, 1.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.5, 1, 1.5, 1.5,
1, 1.5, 1.5, 1, 1, 1, 1, 1)
# Input parameters for mcmc object
input <- structure(list(S.scale = 3.75e-05, Htrunc = "default", S.start = "default",
burn.in = 0, thin = 100, n.iter = 20000, phi.start = 0, phi.scale = 1), .Names = c("S.scale",
"Htrunc", "S.start", "burn.in", "thin", "n.iter", "phi.start",
"phi.scale"), class = "mcmc.geoRglm")
# create mcmc object
mcmc_obj <- create.mcmc.coda( mcmc , mcmc.input = input )
#Plot - smooth = TRUE draws the smooth line through the data
traceplot( mcmc_obj , smooth = TRUE , main = "Default")
# Changing the colour argument passes the same argument through to the lines function called to plot the smooth line
traceplot( mcmc_obj , smooth = TRUE , col = 2 , main = "Change colour to red")
# In the source code of traceplot 'lines()' is called to plot the smooth line.
# Can I specify a colour argument to be passed only to lines without altering
# the function?
# Excerpt from the source code of traceplot:
function (x, smooth = FALSE, col = 1:6, type = "l", ylab = "",
...)
{
... some code here then...
if (smooth) {
for (k in 1:nchain(x)) lines(lowess(xp, yp[, k])
}
}
theme_set(theme_bw())
。 (您应该查看coda
包中的xyplot.mcmc
和scapeMCMC
包...scapeMCMC :: plotTrace
函数可能会根据其col.loess
vs.col.trace
参数执行您想要的操作... - Ben Bolkerlines(lowess(xp, yp[, k]), col = scol[k])
,其中scol <- rep(col, length = nchain(x))
,因此很明显如果不改变函数(例如添加参数scol
并删除上面的定义),就无法更改颜色。 - Jouni Helskelcol
。这个问题的重点是要知道我提出的想法是否可行。 - Simon O'Hanlonplot(x,y,"col"="red")
,也就是说,用字符串命名参数。 - Julián Urbano