Метод добавления треков, аналогичных тепловым картам, в circlize::chordDiagram с заданными спецификациями

Вопрос или проблема

Мне нужно визуализировать дополнительную информацию на моей диаграмме хорд, созданной с помощью circlize. Я не могу понять, как это сделать. Я пытался использовать highlight.section, но это не сработало так просто.

Давайте используем эти данные.

set.seed(1)

  df <- data.frame(
    Genes = 1:52,
    Description = sample(LETTERS[1:7], size = 52, replace = TRUE),
    value1 = sample(0:1, size = 52, replace = TRUE),
    value2 = sample(runif(52, min = 0, max = 0.001), size = 52, replace = TRUE),
    value3 = sample(10:20, size = 52, replace = TRUE)
  )

Я создал этот график, используя следующий код

library(circlize)
library(viridis)

matrix <- with(df, table(Description, Genes))  

  circos.clear()
  circos.par(start.degree = 90)

  description_colors <- setNames(viridis(length(rownames(matrix))), rownames(matrix))
  col_names_color <- setNames(rep("grey", length(colnames(matrix))), colnames(matrix))
  all_colors <- c(description_colors, col_names_color)

  # Генерация диаграммы хорд с заданными цветами
  chordDiagram(matrix, transparency = 0.5, 
               annotationTrack = "grid", 
               annotationTrackHeight = c(0.03),
               preAllocateTracks = list(track.height = 0.1), # Уменьшена высота трека для генов
               grid.col = all_colors, # Применить цвета как к описаниям, так и к генам
               directional = -1,
               big.gap = 30, small.gap = 1)  # Настройте высоту выделенного сектора здесь

  # Текстовые метки для секторов
  circos.trackPlotRegion(track.index = 1, panel.fun = function(x, y) {
    xlim = get.cell.meta.data("xlim")
    ylim = get.cell.meta.data("ylim")
    sector.name = get.cell.meta.data("sector.index")
    circos.text(CELL_META$xcenter, ylim[1] + cm_h(2), sector.name, 
                facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5))
  }, bg.border = NA)

Диаграмма хорд

Вопрос: как вы можете видеть, df также имеет значения value1,
value2, $value3. Я пытаюсь создать следующее из моих данных

KEGG Chord

От связи термина GO с геном хочу создать тепловую карту с кластером с диаграммой хорд из значения log2FC, как на предоставленном изображении. Три значения в столбце df могут обозначать логарифмическое изменение в два раза. Поэтому следует добавить градиентную легенду цветов.

Пожалуйста, помогите мне с этим.

Ответ или решение

Чтобы добавить дополнительную информацию в вашу хордовую диаграмму с использованием библиотеки circlize, вы можете добавить дополнительные треки, которые будут представлять значения из ваших колонок value1, value2 и value3. Мы создадим градиентную цветовую шкалу, чтобы визуализировать эти значения, например, с использованием значения value3 для отображения логарифмического изменения (log2-fold change).

Ниже приведён пример кода, который демонстрирует, как это можно сделать с вашими данными:

# Загрузка необходимых библиотек
library(circlize)
library(viridis)

# Создание данных
set.seed(1)
df <- data.frame(
  Genes = 1:52,
  Description = sample(LETTERS[1:7], size = 52, replace = TRUE),
  value1 = sample(0:1, size = 52, replace = TRUE),
  value2 = sample(runif(52, min = 0, max = 0.001), size = 52, replace = TRUE),
  value3 = sample(10:20, size = 52, replace = TRUE)
)

# Генерация матрицы
matrix <- with(df, table(Description, Genes))

# Очистка предыдущих треков
circos.clear()
circos.par(start.degree = 90)

# Установка цветов для описаний
description_colors <- setNames(viridis(length(rownames(matrix))), rownames(matrix))
col_names_color <- setNames(rep("grey", length(colnames(matrix))), colnames(matrix))
all_colors <- c(description_colors, col_names_color)

# Генерация хордовой диаграммы с указанными цветами
chordDiagram(matrix, transparency = 0.5, 
              annotationTrack = "grid", 
              annotationTrackHeight = c(0.03),
              preAllocateTracks = list(track.height = 0.1), # Высота трека для генов
              grid.col = all_colors, # Применение цветов
              directional = -1,
              big.gap = 30, small.gap = 1)

# Добавление текстовых меток для секторов
circos.trackPlotRegion(track.index = 1, panel.fun = function(x, y) {
  xlim = get.cell.meta.data("xlim")
  ylim = get.cell.meta.data("ylim")
  sector.name = get.cell.meta.data("sector.index")
  circos.text(CELL_META$xcenter, ylim[1] + cm_h(2), sector.name, 
              facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5))
}, bg.border = NA)

# Добавление дополнительного трека для значения value3
# Применение градиентной цветовой шкалы
circos.trackPlotRegion(track.index = 2, panel.fun = function(x, y) {
  sector.name = get.cell.meta.data("sector.index")
  values = df$value3[df$Description == sector.name]
  if (length(values) > 0) {
    # Нормализация значений для цветового градиента
    norm_values = (values - min(values)) / (max(values) - min(values))
    col = viridis(100)[as.numeric(cut(norm_values, breaks=100))]

    circos.rect(CELL_META$xleft, 0, CELL_META$xright, col=col, 
                border=NA, sector.index=sector.name, track.index=2, 
                gp = gpar(fill=NA, col=col), ylim=c(0, 1))
  }
}, bg.border = NA)

# Добавление легенды
legend("topright", legend = seq(min(df$value3), max(df$value3), length=5), 
       fill = viridis(5), title = "Value3", cex = 0.8)

Объяснение кода:

  1. Данные: Данные создаются с помощью data.frame, где value3 используется для визуализации изменений.
  2. Хордовая диаграмма: Создаётся хордовая диаграмма с предварительно назначенными цветами с использованием функции chordDiagram().
  3. Добавление текста: При помощи circos.trackPlotRegion() добавляются метки для секторов.
  4. Дополнительный трек: Второй трек добавляется, который отображает значения value3 с помощью цветового градиента.
  5. Легенда: Добавление легенды для визуализации, чтобы пользователи могли интерпретировать значения, представленные цветами.

Попробуйте этот код и подстраивайте его в зависимости от ваших данных и предпочтений. Этот подход поможет вам визуализировать дополнительные значения, а также предложит удобный способ интерпретации получаемых данных.

Оцените материал
Добавить комментарий

Капча загружается...