我试图绘制一个三重维恩图,但它的大小不成比例。下面是代码。有没有可能使它的大小成比例?
library(VennDiagram)
grid.newpage()
draw.triple.venn(area1=2125, area2=805, area3=387,
n12=805, n23=385, n13=387, n123=385,
category=c("All Extractables","CERAPP","ToxCast"),
col="Black",fill=c("White","Red","Yellow"),
cex = 3,
cat.cex = 2)
1条答案
按热度按时间huus2vyu1#
如果你的意思是你想根据它们包含的值来缩放圆(例如,圆1的大小是圆2的大小的2125/805),我认为你必须在调用时将
euler.d
和scaled
都作为TRUE
传递。而且,由于缩放通常是禁用的,因为可能会产生误导性的图表,所以必须将overrideTriple
设置为某个值以允许缩放。因此,运行下面的代码(适合使用
rscript
运行,并给予我足够的时间来捕获输出):会给予你:
然而,关于你关于 specific 值大小不正确的评论,你给出的代码是(同样,设置为
rscript
和捕获):这产生了:
在这个渲染中,集合#2和#3正确地 * 在 * #1内,因为它们是完全包含的值(
area2 == n12
和area3 == n13
)。图中#1明显更大,但这可能是显示包容性的假象,而不是基于值的实际大小。很明显,2号和3号是以相同的大小渲染的,尽管一个应该是另一个的两倍。所以你是正确的,这些价值观不起作用。文档包含了这个小片段,但没有对特殊情况进行进一步的阐述。
对
euler.d == TRUE
的19种特殊情况作了欧拉图。如果你仔细想想,有些情况显然是不可能用圆圈来渲染的。考虑#2和#3的并集是否是#1的整体(即,不存在“仅#1”的项目)。两个较小的圆完全包含在一个较大的圆中,不可能具有与较大的圆相同的面积(尽管矩形可能适用于这种情况)。
还有其他情况,例如1000的外部集合包含500和499的两个内部集合,内部集合之间没有重叠。
由于
diameter = 2√(area/π)
,两个内圆的直径约为25个单位,外圆的直径约为36个单位。我已经有一段时间没有做几何了,但我很难弄清楚如何将两个内圈放在外圈内而不重叠:-)深入挖掘,我们可以去检查
VennDiagram
的实际 * 代码 *。决定这些特殊情况的部分可以在decide.special.case.R
中找到,它被从draw.triple.venn.R
调用。后者是它根据发现的特殊情况选择
draw.sp.case.scaled
或draw.sp.case.preprocess
之一作为要调用的函数。这19种特殊情况是,决定它们是缩放还是预处理(注意其他情况既不缩放也不预处理):022AAAO
、022AAOO
、023
、032
、120
、121AO
、122AAOO
和130
将缩放。100
、033
、011A
、021AA
、011O
、112AA
、010
、110
、001
、012AA
和111A
不会缩放。前三位数字在这里很重要,它们是(来自评论):
解决这个问题的代码有点复杂。使用的
a1..a7
变量与下图(理想)中的值一致。例如,图中的1
表示a1
,即#1中的填充物不在任何重叠中:在您的数据中,这些 * 实际 * 值设置如下,右侧的字母表示它是(n)非重叠区域,(d)双重叠区域,还是(t)三重叠区域:
通过这些值,您可以看到没有缺失三重重叠,一个缺失双重重叠
a6
,以及两个缺失非重叠a3
和a7
。这将给予你的数字012
,这可能会被012AA
的情况下,不 * 不 * 规模捕获。这些字母在这里是不相关的,因为在特殊情况下,没有什么不是
012AA
的开始012
。所以它要么不能缩放,因为它不是一个特例,要么不能缩放,因为它是一个特殊的情况,特别标记为“不可缩放”。如果在这种情况下你真的需要扩展,显然还有其他人们建议的软件包可以做得更好(比如
Venerable
或nVennR
)。我没有这些经验,所以不能推荐他们自己,但你可能想看看他们。