В 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%. Все данные важны в этом сюжете.
2 ответа
Огорчительный сюжет
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"
или же show.numbers = "Yes"
) или нет (любое другое значение для show.numbers
), вот немного кода:
Поэтому я думаю, что вам нужно изменить этот кусок кода, то есть geom_text
а также aes_string
, чтобы использовать другое эстетическое отображение (ваши относительные частоты). Так может попросить разработчика сделать это?
Бары видны, даже если это 0,1%
Ну, это в конечном итоге зависит от вашего динамического диапазона оси Y и размера вашего графика, то есть, если самый высокий столбец намного больше самого короткого, чем может быть невозможно увидеть оба на одном графике (если вы не сделаете ось прерывистая).
Заключение
Я понимаю, что на самом деле это не решение вашей проблемы, но это ответ, который, мы надеемся, укажет вам направление решения вашей проблемы.
Два факта стоят на пути быстрого и легкого решения этой проблемы:
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 / illustrator. (ПЛОХОЙ)
- вилка
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
я для других целей, но пакет в целом нуждается в серьезном рефакторинге, чтобы его можно было применить к дополнительным случаям использования. Авторы, возможно, хотели предотвратить использование концепции вне их концепции.