В UpSetR, как показать десятичное число на панели пересечения - PullRequest
0 голосов
/ 21 февраля 2019

Я делаю диаграмму расстройства для следующих данных в процентах.Это фиктивный пример для моих более сложных данных.

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") </p>

Я хочу, чтобы эти проценты отображались в виде десятичных чисел, и все столбцы были видны, даже если они равны 0,1%.Все данные важны на этом участке.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

На пути быстрого и простого решения этой проблемы стоят два факта:

UpSetR очень сильно ориентирован на дискретные множества счетных объектов.

Потенциальное решение было бы вместо использования целых объектов для использования дробных объектов, но первое, что upset() делает, это проверяет, для каких столбцов вашего фрейма данных "0" и "1" имеют свои единственные уровни.Это жестко закодировано.Если это не удается, объект startend становится NULL, и функция никак не может сделать что-либо.

UpSetR не дает очень хорошего доступа к создаваемым графикам.

После построения графиков у вас не остается возвращаемого значения из 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 /иллюстратор.(ПЛОХО)

  • Вилка UpSetR и захватить параметры scale.intersections и scale.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 сам для других целей, но пакет, как правило, нуждается в серьезном рефакторинге, чтобы его можно было применять в дополнительных случаях использования.Авторы, возможно, хотели предотвратить использование концепции вне их концепции.

0 голосов
/ 21 февраля 2019

Расстраивающий сюжет

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.

Существует *Аргумент 1036 *, но позволяет показывать только эти абсолютные частоты поверх столбцов (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 прерывистой).

Заключение

Я понимаю, что этона самом деле это не решение вашей проблемы, но это ответ, который, мы надеемся, укажет вам решение вашей проблемы.

...