【问题标题】:Remove label borders in R Spie plot删除 R Spie 图中的标签边框
【发布时间】:2014-01-27 06:09:08
【问题描述】:

这是我的代码

require(caroline)
   x <- c(100, 90, 80, 15, 120, 25)
   y <- c(120, 120, 60, 10, 120, 15)
   names(x) <- c("Mark_1", "Mark_2", "Mark_3", "Mark_4", "Mark_5", "Mark_6")
   spie.sales <- spie(x, y,col=rainbow(length(x)),bg=c("black", "violetred1", 
                                                       "cornsilk","red", "green", "white"))

如何去除标签周围的边框(Mark_1、Mark_2 等)?

这是我在绘图时得到的图像

【问题讨论】:

  • 没有参数,可以做到,但是可以编辑函数spie (fix(spie)),在if (pie.labs)位后面注释grid.rect。但是,这对我不起作用,因为 R 抛出错误 could not find function .spie

标签: r plot label


【解决方案1】:

虽然可以在加载caroline 包之前使用函数fixInNamespace 修改spie 函数,但我更喜欢修改函数的副本。

## Create copy of spie
spie2 <- spie

此外,您可以保留绘制矩形的选项。因此,这里将一个新参数labRects 添加到新函数中。当此对象的值为FALSE 时,不会绘制矩形。当TRUE时,生成原图。

## Add new argument to spie2 function
formals(spie2) <- c(formals(spie), labRects = FALSE)

然后找到body函数的哪一部分需要改,改一下

## Assign new code into the appropriate part of the body of the function
body(spie2)[[9]][[4]][[8]][[3]][[2]] <- substitute({
    if(labRects) {
        grid.rect(x = cos(angleAnn) * maxx, y = sin(angleAnn) * maxx, 
            width = 1.5 * stringWidth(x$namesSlices[i]), height = 1.5 * 
            stringHeight(x$namesSlices[i]), default.units = "native", 
            gp = gpar(col = col[i], fill = "white", lwd = 2))
    }
})

因为正如 Zbynek 所说,spie 函数和新的 spie2 函数都依赖于 "caroline" 包中未导出的 .spie 函数,我们需要将 spie2 的环境更改为匹配spie 以允许访问.spie 函数。

## Change environment of spie2 to "caroline"
environment(spie2) <- environment(spie)

## ...and plot
spie.sales <- spie2(x, y,col=rainbow(length(x)),
  bg=c("black", "violetred1", "cornsilk","red", "green", "white"),
  labRects = FALSE)

【讨论】:

  • 感谢 BenBarnes 和 Zbynek!该解决方案运行良好
  • @wenge,很高兴事情对你有用。请参阅 stackoverflow.com/help/someone-answers 以获取有关 StackOverflow 指示有用解决方案的提示。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2014-09-15
  • 2013-05-18
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多