令人不安的情节
最初的回答
library(UpSetR)
x <- c(a=80, b=9.9, c=5, 'a&b'=0.1, 'a&c'=1.65, 'c&b'=3.35)
upset(fromExpression(x), order.by = "freq", show.numbers = 'yes')
您的问题
所以您想要两件事情:
- 百分比显示为十进制数
- 即使是0.1%,也要显示条形图
百分比显示为十进制数
您可以使用
fromExpression
将百分比向量转换为计数(整数)。因此,
upset
的输入是一个数据框:
最初的回答
library(UpSetR)
x <- c(a=80, b=9.9, c=5, 'a&b'=0.1, 'a&c'=1.65, 'c&b'=3.35)
str(fromExpression(x))
upset
内部会获取标签数据,因此原始百分比的链接不再存在于upset
中。
目前来看,使用百分比或其他自定义标签似乎不是UpSetR
包中upset
函数的支持选项。
有一个show.numbers
参数,但只允许在条形图上显示绝对频率(show.numbers = "yes"
或show.numbers = "Yes"
)或不显示(show.numbers
的任何其他值)。以下是涉及到的代码片段:
https://github.com/hms-dbmi/UpSetR/blob/fe2812c8cbe87af18c063dcee9941391c836e7b2/R/MainBar.R#L130-L132
因此,我认为您需要更改代码片段,即geom_text
和aes_string
,以使用不同的美学映射(相对频率)。所以也许可以请开发人员来处理?
即使是0.1%也可见的条形图
好吧,这最终取决于您的y轴动态范围和图表大小,即如果最高的条形图远大于最短的,则可能无法在同一图表中同时看到两者(除非您使y轴不连续)。
结论
我理解这并不是您问题的解决方案,但希望这个答案能指引您找到解决问题的方向。