Как назначить значение определенному цвету, сопоставляя все остальные значения непрерывному цветовому градиенту? - PullRequest
0 голосов
/ 15 января 2019

Я сделал тепловую карту дифференциальной экспрессии генов между подкластерами клеток из data.frame diffexp, используя ggplot и ggplotly().

Каждый фрагмент представляет количество генов, которые выражены дифференциальномежду парой подкластеров (показанных как total во всплывающей подсказке), и NA имеют серый цвет.

cluster.heatmap <- 

  ggplot(diffexp) +
  geom_tile(aes(x = cluster_A, y = cluster_B, fill = total, 
    text = paste0("up_genes: ", up_genes)), 
    colour="white", size=0.05) +
  scale_fill_viridis_c(begin=0.1, na.value="grey20") +
  ggtitle("Differentially Expressed Genes Between Subcluster Pairs")

enter image description here

Когда Iпреобразуйте это в интерактивную тепловую карту, используя ggplotly, вместо этого NA окрашены в белый цвет:

ggplotly(cluster.heatmap)

ggplotly

Я пытался использовать heatmaply пакет, но то же самое происходит.

diffexp.spread <- select(diffexp, cluster_A, cluster_B, total) %>%
                   spread(cluster_B, total) %>% na_if(0)

heatmaply(diffexp.spread, na.color = "grey20")

enter image description here

Что я хотел бы сделать, чтобы решить эту проблему, так или иначе изменить масштабсопоставления цветов так, что 0 отображается на grey20, а цветовая шкала viridis начинается с 1.

Я знаю, что должен использовать пакет scales и, возможно, создать новый цветовой вектор, такойкак

colors.vir <- c("grey20", viridis(256))

scale_fill_gradient(colors = colors.vir,
                     values = scales::rescale(
                               (0, 0.1, # grey value limits
                                1, max(diffexp.spread) # viridis value limits) 
                    )

или что-то подобное выше, но я не могу понять это.

...