如何在directlabels中配置box.color;draw.rects";?

如何在directlabels中配置box.color;draw.rects";?,r,ggplot2,direct-labels,R,Ggplot2,Direct Labels,以下是我的工作示例: library(ggplot2) library(directlabels) # ver 2014.6.13 via r-forge DF <- expand.grid(z = seq(1, 3001, by=10), k = seq(from=0.5, to=5, by=0.25)) # Defines the function value for each z-k combination DF$dT <- with(DF, -0.07 * z * (1/

以下是我的工作示例:

library(ggplot2)
library(directlabels)  # ver 2014.6.13 via r-forge
DF <- expand.grid(z = seq(1, 3001, by=10), k = seq(from=0.5, to=5, by=0.25))

# Defines the function value for each z-k combination
DF$dT <- with(DF, -0.07 * z * (1/2.75 - 1/k))

p <- ggplot(DF, aes(x = z, y = k, z = dT)) +  theme_bw() + 
 stat_contour(aes(colour=..level..), breaks=c(seq(from=-40, to=0, by=5), c(seq(from=5, to=150, by=10))))
angled.boxes <- list("far.from.others.borders","calc.boxes","enlarge.box","draw.rects")
direct.label(p, "angled.boxes")
库(ggplot2)
图书馆(directlabels)#2014年6月13日通过r-forge发行

DF这似乎是一个黑客,但它奏效了。我刚刚重新定义了
draw.rects
函数,因为由于directlabels调用其函数的方式笨拙,我看不到如何向它传递参数。(非常像ggplot函数。我从来都不习惯函数是字符值。):

assignInNamespace('draw.rects',
功能(d,…)
{
if(is.null(d$box.color))

d$box.color我还收到了软件包作者Toby Hocking的回复。以下两种方法都有效:

my.dl <- list(dl.trans(box.color="red"),"draw.rects")
direct.label(p, list("far.from.others.borders","calc.boxes", "enlarge.box", "my.dl"))

使用SL版本的R3.1.1在MacOS中使用my.dl时,我没有注意到盒子的角度,填充物也不是不透明的白色。我尝试了各种各样的努力来重新定义各种
directlabels
函数,但都没有成功。您是否从R-forge获得了最新版本的directlabels?
install.packages(“directlabels”),repos="http://r-forge.r-project.org")
当我从源代码编译时,它具有您演示的行为。仍然无法看到要修改该对象的哪个组件。我尝试过做类似的事情,但没有
assignInNamespace
函数-直到现在才听说过它!我不知道如何调用我的自定义函数,这让我很恼火。感谢您的努力,非常感谢nswer,真遗憾,这需要这么多的努力。有时你会失败,就像在这种情况下,简单地用
屏蔽一个函数看不到另一种方法,所以你得到了答案。我认为有一种方法可以使用
apply.method
,但文档对我来说不够清晰,无法向我展示如何做。这些方法有效。使用
box.color=NA
来制作边界不可见。
assignInNamespace( 'draw.rects',  
function (d, ...) 
{
    if (is.null(d$box.color)) 
        d$box.color <- "red"
    if (is.null(d$fill)) 
        d$fill <- "white"
    for (i in 1:nrow(d)) {
        with(d[i, ], {
            grid.rect(gp = gpar(col = box.color, fill = fill), 
                vp = viewport(x, y, w, h, "cm", c(hjust, vjust), 
                  angle = rot))
        })
    }
    d
}, ns='directlabels')
dlp <- direct.label(p, "angled.boxes")
dlp
my.dl <- list(dl.trans(box.color="red"),"draw.rects")
direct.label(p, list("far.from.others.borders","calc.boxes", "enlarge.box", "my.dl"))
my.dl <- list(box.color="red", "draw.rects")
direct.label(p, list("far.from.others.borders","calc.boxes", "enlarge.box", "my.dl"))