Есть ли способ вручную настроить границы цветового градиента на филогенезе в обезьянах / фитоинструментах?

Я пытаюсь визуализировать результаты филогенетической регрессии методом наименьших квадратов, используя ape и phytools. В частности, я пытался создать уравнение регрессии для целей прогнозирования, и я смотрю, насколько филогенетический сигнал влияет на остатки (и, следовательно, на точность уравнения). Я использовал код, несколько похожий на следующий, чтобы построить результаты (хотя здесь он был переоборудован для фиктивных данных).

library("ape")
library("phytools")
orig_tree<-rtree(n=20)
plot(orig_tree)
values<-data.frame("residuals"=runif(20,min=-1,max=1),row.names=orig_tree$tip.label)
values<-setNames(values$residuals,rownames(values))
residualsignalfit<-fastAnc(orig_tree,values,vars=TRUE,CI=TRUE)
obj<-contMap(orig_tree,values,plot=FALSE)
plot(obj,fsize=.25)

Однако проблема заключается в том, что у меня есть несколько видов, которые демонстрируют чрезвычайно высокие остатки по сравнению с остальной частью набора данных. Поскольку минимальные и максимальные значения цветового градиента установлены равными минимальному и максимальному значениям фактического столбца, это размывает весь контраст между 90% набора данных для визуализации нескольких экстремальных значений выбросов. Ниже приведен код, который воспроизводит пример того, что я имею в виду, по сравнению с obj выше.

values2<-values
values2[6]<--2
values2[7]<-2
residualsignalfit2<-fastAnc(orig_tree,values2,vars=TRUE,CI=TRUE)
obj2<-contMap(orig_tree,values2,plot=FALSE)
plot(obj2,fsize=.25)

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

Я пытаюсь найти способ установить минимум и максимум цветового градиента, чтобы любое значение ≤ -1 было максимально возможным значением красного цвета, а любое значение ≥ 1 было максимально возможным значением синего цвета, тем самым обеспечивая больший контраст в остальном. остатков. Я пробовал использовать команду

plot(obj2,fsize=.25,lims=c(-1,1))

но, как вы можете видеть из этого кода, это ничего не делает. Я знаю, что ggplot2 имеет возможность масштабировать градиент цвета на основе значений, введенных пользователем, но я не могу понять, как сделать объекты филогении из ape или phytools, которые будут построены в ggplot2.

Учитывая это, есть ли способ манипулировать шаблоном цветового градиента в обезьянах / фитоинструментах, чтобы можно было произвольно установить максимальные и минимальные границы для цветового градиента?


person user2352714    schedule 20.12.2020    source источник


Ответы (1)


Вы можете управлять шаблоном цветового градиента, сжимая значения между некоторыми произвольными границами (в моем примере это квантили 90%), чтобы настроить цветовой градиент в phytools::contMap:

## The vector of values with two outliers
values_outliers <- values
values_outliers[6] <- -10
values_outliers[7] <- 10

## The original heat plot object
contMap_with_outliers <- contMap(orig_tree, values_outliers, plot = FALSE)

plot(contMap_with_outliers, fsize = .25)

## Removing the outliers (setting them within to the 90% CI)
values_no_outliers <- values_outliers
## Find the 90% boundaries
boundaries <- quantile(values_no_outliers, probs = c(0.05, 0.95))
## Changing the values below the lowest boundary
values_no_outliers <- ifelse(values_no_outliers < boundaries[1], boundaries[1], values_no_outliers)
## Changing the values above the highest boundary
values_no_outliers <- ifelse(values_no_outliers > boundaries[2], boundaries[2], values_no_outliers)

## The heat plot object without outliers
contMap_without_outliers <- contMap(orig_tree, values_no_outliers, plot = FALSE)

plot(contMap_without_outliers, fsize = .25)
person Thomas Guillerme    schedule 28.12.2020