【问题标题】:R: legend boxes with more than one colourR:具有多种颜色的图例框
【发布时间】:2015-06-23 13:32:48
【问题描述】:

我有一个 plot() ,其中多个颜色阴影代表同一事物。我想添加一个图例,通过双色框来传达这一点(参见下面的示例)。有没有办法使用 legend() 或类似的命令来做到这一点?或者,有没有办法识别这些框的精确坐标,以便我可以在其上绘制一个 polygon() 三角形?

注意:legend() 确实返回外框和每个标签左上角的坐标,但我不确定这是否足以计算彩色框的位置。

【问题讨论】:

  • 为什么同一种东西有多种颜色?
  • @Molx:举一个简单的例子:想象一个饼图或堆积条形图,您可以在其中按性别(男性/女性=蓝色/红色)和收入等级(低/中/高收入 = 低/中/高强度颜色)。这会产生总共 6 种颜色和颜色强度的组合。当您获得更多类别时,最好有一个单独总结颜色和强度的图例,而不是列出所有可能的组合。

标签: r plot legend


【解决方案1】:

这有点小题大做,但您可以将两个图例放在另一个图例之上。不幸的是,没有左三角形 pch 完全符合您的要求。

plot(1)
legend("bottomright",c("Label 1", "Label 2"),pch=22,col=c("red","blue"),pt.bg=c("red","blue"), pt.cex=1.8)
legend("bottomright",c("Label 1", "Label 2"),pch=21,col=c("green","orange"),pt.bg=c("green","orange"))

【讨论】:

  • 谢谢,我知道如果没有“黑客”内部功能,我想要的正是我想要的。我很快就会在这里发布一个解决方案。
【解决方案2】:

稍微脏一点的 hack 可以让您获得 legend() 函数,从而为您提供必要的信息。比我更聪明的人可能会计算出legend() 如何计算框定位并将其复制到函数之外。请注意,可能不建议编辑标准 R 函数。

如果您还没有编辑过 R 函数,一个简单(和临时)的访问它的方法是输入

fix(legend)

打字

rm(legend)

稍后将撤消您的更改。

找到写有fill <- rep 的部分并添加由 cmets 指示的行:

    fillList <- NULL ## added
    if (mfill) {
        if (plot) {
            fill <- rep(fill, length.out = n.leg)
            rect2(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox, 
                col = fill, density = density, angle = angle, 
                border = border)
            fillList <- data.frame(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox) ## added
        }
        xt <- xt + dx.fill
    }

找到最后一行并将其更改为

    invisible(list(rect = list(w = w, h = h, left = left, top = top), 
        text = list(x = xt, y = yt), fillList=fillList)) ## modified

现在通过

调用图例
output <- legend(...) ## replace ... with whatever you want to have as inputs

并使用legend()返回的信息绘制三角形,如下所示:

    with(output$fillList[1,], { ## first box
        polygon(c(left, left+dx, left+dx), c(top, top, top-dy), col=myColour, border=NA)
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多