venneuler中的传奇维恩图 [英] legend venn diagram in venneuler

查看:130
本文介绍了venneuler中的传奇维恩图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为venneuler venn图创建一个图例.这应该很简单,因为功能venneuler将用于控制台的颜色返回.颜色的值介于0到1之间.我想知道如何将$ colors中存储的这些数字值转换为可用于填充图例中fill参数的值.

I would like to create a legend for a venneuler venn diagram. This should be straight forward because the function venneuler returns the colors used to the console. The colors are of a value between 0 and 1. I want to know how to turn those numberic values stored in $colors into something I can use to fill the fill argument in legend.

我在下面通过使用从venneuler提取的$ colors和从colors()进行索引的方法进行了尝试.我知道这是不正确的,因为colors()是使用间隔值索引的,但是将其放入以显示我想要的内容.

I have attempted this below by using the $colors extracted from venneuler and indexing from colors(). I know this is not correct because colors() is indexed with interval values but put it in to show what I'd like.

set.seed(20)
x <- matrix(sample(0:1, 100, replace = TRUE), 10, 10)
colnames(x) <- LETTERS[1:10]
rownames(x) <- letters[1:10]

require(venneuler)
y <- venneuler(x)
plot(y)

y$colors

legend(.05, .9, legend = colnames(x), fill = colors()[y$colors])

推荐答案

通过细读plot.VennDiagram及其默认值,您可以看到它如何将y$colors中的数字转换为rgb颜色字符串. (尝试getAnywhere("plot.VennDiagram")自己看看.)

By perusing plot.VennDiagram and its defaults you can see how it converts the numbers in y$colors to rgb color strings. (Try getAnywhere("plot.VennDiagram") to have a look yourself.)

在这里,我已经将处理颜色的两段代码(以您的情况为例)收集到一个函数中,该函数将为您进行转换.图例的位置可能会得到改善,但这是另一个问题...

Here I've collected the two bits of code that processed the colors (in your case) into a single function that will do the conversion for you. The positioning of the legend could probably be improved, but that's another problem...

col.fn <- function(col, alpha=0.3) {
    col<- hcl(col * 360, 130, 60)
    col <- col2rgb(col)/255
    col <- rgb(col[1, ], col[2, ], col[3, ], alpha)
    col
}

COL <- col.fn(y$colors)
# The original order of columns in x is jumbled in the object returned
# by venneuler. This code is needed to put the colors and labels back
# in the original order (here alphabetical).
LABS <- y$labels
id <-  match(colnames(x), LABS)

plot(y)
legend(.05, .9, legend = LABS[id], fill = COL[id], x="topleft")

这篇关于venneuler中的传奇维恩图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆