Корректировки тепловой карты (geom_tile)?

#r #ggplot2

Вопрос:

Я очень новичок в R и пытаюсь составить тепловую карту для своего коллеги.

Мне удалось создать тепловую карту, но есть несколько неправильных вещей.

Вот как выглядит мой сюжет в настоящее время:

тепловая карта

Что я хотел бы изменить в своем существующем коде:

  • Я хотел бы каким-то образом упорядочить имена образцов в моей таблице, чтобы они были сгруппированы вместе. Например, для образца NC_rep1_nogel_wash10_IgG_p150 я хотел бы , чтобы он был сгруппирован со всеми образцами IgG.

Другими словами, я думал о чем-то подобном для упорядочения по осям x и y, но не знал, как это реализовать:

     sample_order <-c(
"NC_rep1_nogel_wash10_IgG_p150",
"NC_rep2_nogel_wash10_IgG_p150",
"XL_rep2_nogel_wash10_IgG_p150",
"NC_rep1_nogel_wash10_p150",
"NC_rep2_nogel_wash10_p150",
"XL_rep2_nogel_wash10_p150"

    )
 
  • Я также пытаюсь изменить динамический диапазон цветов. Прямо сейчас трудно увидеть разницу между 20% и 50% на участке. Можно ли также инвертировать цвета?

Мой код:

 library(readxl)
library(tidyverse); library(scales)

best_peak <- read_csv("/Users/kylestangline/OneDrive - Eclipse Bioinnovations Inc/Projects/20210427-eclip-adar005/overlaps/clusters/heatmap.csv")


best_peak %>%
  separate(`Peak Comparison`, into = c("peak1", "peak2"), sep = " vs ") %>%
  mutate(label = paste(percent(Rate, accuracy = 1), comma(Intersection.Value, accuracy = 1), sep = "n")) %>%
  ggplot(aes(peak1, peak2, fill = Rate))  
  geom_tile()  
  geom_text(aes(label = label), size = 1.50, color = "gray80", lineheight = 0.7)  
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
 

Table

One extra thing about the table: my code grabs the sample names from the Peak Comparison column, where it is separated by » vs »

Peak Comparison Param -a Param -b Intersection.Value Total -a Total -b Rate
NC_rep1_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 12770 12770 12770 1
NC_rep1_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 4370 12770 94156 0.342208301
NC_rep1_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 2260 12770 10012 0.225729125
NC_rep1_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 4034 12770 81936 0.315896633
NC_rep1_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 2352 12770 11470 0.20505667
NC_rep1_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 5358 12770 253054 0.419577134
NC_rep2_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 2242 10012 12770 0.223931282
NC_rep2_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 3220 10012 94156 0.321614063
NC_rep2_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 10012 10012 10012 1
NC_rep2_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 3046 10012 81936 0.304234918
NC_rep2_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 1813 10012 11470 0.181082701
NC_rep2_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 3850 10012 253054 0.384538554
XL_rep2_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_IgG_p150 2276 11470 12770 0.198430689
XL_rep2_nogel_wash10_IgG_p150 vs NC_rep1_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 3463 11470 94156 0.301918047
XL_rep2_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_IgG_p150 1772 11470 10012 0.176987615
XL_rep2_nogel_wash10_IgG_p150 vs NC_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 3219 11470 81936 0.280645161
XL_rep2_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_IgG_p150 11470 11470 11470 1
XL_rep2_nogel_wash10_IgG_p150 vs XL_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 4439 11470 253054 0.38700959
NC_rep1_nogel_wash10_p150 vs NC_rep1_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 4668 94156 12770 0.365544244
NC_rep1_nogel_wash10_p150 vs NC_rep1_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 94156 94156 94156 1
NC_rep1_nogel_wash10_p150 vs NC_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 3362 94156 10012 0.335797044
NC_rep1_nogel_wash10_p150 против NC_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 16636 94156 81936 0.203036516
NC_rep1_nogel_wash10_p150 против XL_rep2_nogel_wash10_IgG_p150 NC_rep1_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 3714 94156 11470 0.323801221
NC_rep1_nogel_wash10_p150 против XL_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 28631 94156 253054 0.304080462
NC_rep2_nogel_wash10_p150 против NC_rep1_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 4273 81936 12770 0.334612373
NC_rep2_nogel_wash10_p150 против NC_rep1_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 16572 81936 94156 0.202255419
NC_rep2_nogel_wash10_p150 против NC_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 3154 81936 10012 0.315021974
NC_rep2_nogel_wash10_p150 против NC_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 81936 81936 81936 1
NC_rep2_nogel_wash10_p150 против XL_rep2_nogel_wash10_IgG_p150 NC_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 3438 81936 11470 0.299738448
NC_rep2_nogel_wash10_p150 против XL_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 26501 81936 253054 0.323435364
XL_rep2_nogel_wash10_p150 против NC_rep1_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_IgG_p150 5899 253054 12770 0.461942052
XL_rep2_nogel_wash10_p150 против NC_rep1_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 NC_rep1_nogel_wash10_p150 30344 253054 94156 0.322273673
XL_rep2_nogel_wash10_p150 против NC_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_IgG_p150 4072 253054 10012 0.406711946
XL_rep2_nogel_wash10_p150 против NC_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 NC_rep2_nogel_wash10_p150 28397 253054 81936 0.346575376
XL_rep2_nogel_wash10_p150 против XL_rep2_nogel_wash10_IgG_p150 XL_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_IgG_p150 4930 253054 11470 0.429816914
XL_rep2_nogel_wash10_p150 против XL_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 XL_rep2_nogel_wash10_p150 253054 253054 253054 1

Ответ №1:

Если вы преобразуете свои дискретные x отображения и y отображения осей в a factor , вы можете управлять порядком их отображения.

 sample_order <- c(
"NC_rep1_nogel_wash10_IgG_p150",
"NC_rep2_nogel_wash10_IgG_p150",
"XL_rep2_nogel_wash10_IgG_p150",
"NC_rep1_nogel_wash10_p150",
"NC_rep2_nogel_wash10_p150",
"XL_rep2_nogel_wash10_p150" )

best_peak %>%
  separate(`Peak Comparison`, into = c("peak1", "peak2"), sep = " vs ") %>%
  mutate(
   label = paste(percent(Rate, accuracy = 1),
                 comma(Intersection.Value, accuracy = 1), sep = "n"),
   across(c(peak1,peak2),
          ~factor(., levels = sample_order))
    ) %>%
  ggplot(aes(peak1, peak2, fill = Rate))  
  geom_tile()  
  geom_text(aes(label = label), size = 1.50, color = "gray80", lineheight = 0.7)  
  theme(axis.text.x = element_text(angle = 45, hjust = 1))