UpSet плоты в R для визуализации пересечений списков



Сегодня разберемся, что это такое, как их строить и в каких случаях они нужны.

UpSet плоты - это остроумная альтернатива диаграммам Венна для большого числа пересечений.

Диаграммы Венна отражают все возможные пересечения, объединения, разности нескольких списков. Если этих множеств не больше пяти, то такие диаграммы позволяют визуально оценить взаимоотношения списков. Однако, диаграммы Венна плохо масштабируются, и в ситуации, когда надо показать больше 5 списков или множеств, неприменимы.



Для визуализации большого количества пересечений Lex с соавторами предложили концепцию UpSet плота [Lex et al., 2014]. Сейчас есть R-пакеты UpSetR и ComplexUpset в репозитории CRAN, есть реализации на Python, например py-upset, UpSetPlot.



Начнем разбор с R-пакета UpSetR. Для отрисовки графиков есть вариант вбить руками количество элементов в списках и прописать все пересечения и количество элементов в них, но очевидно, что это не оптимальный вариант (называется fromExpression()). Намного функциональнее подать на вход список интересующих векторов и использовать функцию fromList(). Эта функция создает матрицу пересечений списков, которая и используется для отрисовки upset-графика. Функция upset() позволяет настроить порядок отображения списков, выбрать только определенные пересечения и выбрать, отображать ли пустые множества. Библиотека опирается только на базовый R, дополнительные библиотеки не нужны. Это как плюс, так и минус, к тому же репозиторий пакета давно не обновлялся, и поэтому сейчас можно использовать более новый пакет ComplexUpset.



Пакет ComplexUpset представляет надстройку над пакетом UpSetR с использованием фишек пакета ComplexHeatmap и ggplot2. Вот здесь разобрано, как работает пакет, возможности кастомизации графиков в нем более гибкие, чем в старом пакете, к тому же интеграция с ggplot2, на мой взгляд, скорее преимущество, чем недостаток. Например, можно сопровождать график боксплотом, подкрашивать уровни пересечения (например, пересечения двух списков обозначить зеленым, трех списков - синим и так далее), выделять цветом наиболее интересные пересечения списков. Еще этот пакет можно использовать в Python, почитать подробнее можно здесь.



Резюмируя - UpSet плоты - это отличный вариант визуализации пересечений множества групп, который часто встречается в биоинформатических статьях.

В следующем посте прикрепляю примеры графиков upset и сравнение с диаграммами Венна.



#R #data_vis