42-*_*42- 15
首先,构造一个函数,fourvar将这四个参数作为参数.在这种情况下,您可以使用3个变量完成它,其中一个变量是lambda_1上的lambda_2.Alpha1固定为2,因此alpha_1/alpha_2将在0-10之间变化.
fourvar <- function(a1,a2,l1,l2){
a1* integrate( function(x) {(1-x)^(a1-1)*(1-x^(l2/l1) )^a2} , 0 , 1)$value }
Run Code Online (Sandbox Code Playgroud)
诀窍是要意识到该integrate函数返回一个列表,你只想要该列表的'value'部分,因此它可以成为Vectorize()-ed.
其次,使用该函数构造矩阵:
mat <- outer( seq(.01, 10, length=100),
seq(.01, 10, length=100),
Vectorize( function(x,y) fourvar(a1=2, x/2, l1=2, l2=y/2) ) )
Run Code Online (Sandbox Code Playgroud)
那么在这些位置创建带标签的情节的任务只能轻松完成lattice::contourplot.在进行了合理的搜索后,似乎geom_contour标记的解决方案仍然是ggplot2中正在进行的工作.我发现的唯一标签策略是外部包装.但是,directlabel在这种情况下,'directlabels'软件包的功能似乎没有足够的控制来正确地传播标签.在我看到的其他例子中,它确实在标绘区域周围散布标签.我想我可以查看代码,但由于它依赖于'proto'包,它可能会被奇怪地封装,所以我没看过.
require(reshape2)
mmat <- melt(mat)
str(mmat) # to see the names in the melted matrix
g <- ggplot(mmat, aes(x=Var1, y=Var2, z=value) )
g <- g+stat_contour(aes(col = ..level..), breaks=seq(.1, .9, .1) )
g <- g + scale_colour_continuous(low = "#000000", high = "#000000") # make black
install.packages("directlabels", repos="http://r-forge.r-project.org", type="source")
require(directlabels)
direct.label(g)
Run Code Online (Sandbox Code Playgroud)
请注意,这些是矩阵的索引位置而不是参数的比例,但这应该很容易修复.

另一方面,这是在格子中构造它的容易程度(我觉得它看起来更"干净":
require(lattice)
contourplot(mat, at=seq(.1,.9,.1))
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
3729 次 |
| 最近记录: |