令人心烦意乱的情节
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))
#> 'data.frame': 98 obs. of 3 variables:
#> $ a: num 1 1 1 1 1 1 1 1 1 1 ...
#> $ b: num 0 0 0 0 0 0 0 0 0 0 ...
#> $ c: num 0 0 0 0 0 0 0 0 0 0 ...
upset
然后在内部从该数据获取标签,因此原始百分比的链接不再存在于内部upset
.
将标签设置为百分比或其他一些自定义标签似乎不是该函数支持的选项upset
来自UpSetR
此刻的包裹。
有的是show.numbers
参数,但只允许在条形顶部显示这些绝对频率(show.numbers = "yes"
or show.numbers = "Yes"
)或不(任何其他值show.numbers
),这是涉及的代码位:
https://github.com/hms-dbmi/UpSetR/blob/fe2812c8cbe87af18c063dcee9941391c836e7b2/R/MainBar.R#L130-L132 https://github.com/hms-dbmi/UpSetR/blob/fe2812c8cbe87af18c063dcee9941391c836e7b2/R/MainBar.R#L130-L132
所以我认为你需要改变那段代码,即geom_text
and aes_string
,使用不同的美学映射(您的相对频率)。那么可以请开发商来做吗?
即使是 0.1%,也可以看到条形
好吧,这最终取决于您的 y 轴动态范围和绘图的大小,即,如果最高的条形图比最短的条形图大得多,则可能不可能在同一个图表中看到两者(除非您使 y-轴不连续)。
结论
我知道这并不是真正解决您的问题,但它是一个希望为您指明解决问题的方向的答案。