Вопрос или проблема
Мне нужно визуализировать дополнительную информацию на моей диаграмме хорд, созданной с помощью 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. Я пытаюсь создать следующее из моих данных
От связи термина 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)
Объяснение кода:
- Данные: Данные создаются с помощью
data.frame
, гдеvalue3
используется для визуализации изменений. - Хордовая диаграмма: Создаётся хордовая диаграмма с предварительно назначенными цветами с использованием функции
chordDiagram()
. - Добавление текста: При помощи
circos.trackPlotRegion()
добавляются метки для секторов. - Дополнительный трек: Второй трек добавляется, который отображает значения
value3
с помощью цветового градиента. - Легенда: Добавление легенды для визуализации, чтобы пользователи могли интерпретировать значения, представленные цветами.
Попробуйте этот код и подстраивайте его в зависимости от ваших данных и предпочтений. Этот подход поможет вам визуализировать дополнительные значения, а также предложит удобный способ интерпретации получаемых данных.