首页 > 解决方案 > 在 UpSetR 中,如何在交叉栏上显示十进制数

问题描述

我正在为以下百分比数据制作一个不安图。这是我更复杂数据的一个虚拟示例。

x <- c(a=80, b=9.9, c=5, 'a&b'=0.1, 'a&c'=1.65, 'c&b'=3.35) 不安(fromExpression(x), order.by = "freq")

我希望这些百分比显示为十进制数字,并且所有条形都可见,即使它是 0.1%。所有数据在此图中都很重要。

标签: rupsetr

解决方案


有两个事实阻碍了快速轻松地解决这个问题:

UpSetR非常强烈地面向离散的可数对象集。

一个潜在的解决方案是使用小数对象而不是使用整个对象,但首先要做的upset()是检查数据框中的哪些列具有"0"它们"1"的唯一级别。这是硬编码的。如果这失败了,startend对象就变成NULL了,并且函数将无法做任何事情。

UpSetR不能很好地访问它创建的图。

绘制好图后,您将没有任何返回值 from upset()。这意味着您不能修改绘图对象本身或更改它们在允许传递给的参数之外的绘图方式upset()

所以,你可以做什么?

  • 根据您的真实情节的复杂程度(以及重新绘制它的频率),您可以这样做:
x <- c(a=80, b=9.9, c=5, 'a&b'=0.1, 'a&c'=1.65, 'c&b'=3.35) 
upset(fromExpression(x*100), order.by = "freq")

然后在inkscape/illustrator中编辑。(坏的)

  • 分叉UpSetR和劫持scale.intersectionsandscale.sets参数。在Make_main_bar()函数中,您只需将其处理“百分比”参数scale_intersections的方式更改为 ,并将Make_size_plot()处理相同参数的方式更改为scale_sets。这将变成:
x <- c(a=80, b=9.9, c=5, 'a&b'=0.1, 'a&c'=1.65, 'c&b'=3.35) 
upset(fromExpression(x*100), order.by = "freq",
      scale.intersections="percent", scale.sets="percent")

我个人UpSetR出于其他目的分叉了自己,但是该包通常需要进行重大重构,以便可以将其应用于其他用例。作者可能想阻止在他们的概念之外使用该概念。


推荐阅读