Commande de tracé matriciel à l'aide de ggplot2

Oct 06 2020

J'essaie de tracer un graphique matriciel en utilisant ggplot2. J'utilise le code suivant

library(tidyverse)  
library(RColorBrewer)

df %>% 
  mutate(Models = factor(Models, labels = c("NDVI","SR","WBI","NWI-1","NWI-2","NWI-3","NWI-4","1650/2220 nm ratio"))) %>% 
  pivot_longer(-Models) %>% 
  mutate(p.value = cut(value, c(max(value, na.rm = T), 0.05, 0.01, min(value, na.rm = T)),
                       labels = c("NS","< 0.05","< 0.01"))) %>% 
  ggplot(aes(x=Models,y=name, fill=p.value)) +
  theme_bw() +
  geom_tile() + 
  xlab("Parameters") + ylab(" ") + 
  theme(text=element_text(size=18, family="serif"))+
  scale_colour_manual(values = c("#DAA520", "#F5DEB3", "#FFF8DC","#DCDCDC"),
                      aesthetics = c("colour", "fill")) +
  geom_text(aes(label=format(round(value, 2), nsmall = 2)), color="black", size=2)

ce qui me renvoie l'intrigue suivante

Comme vous pouvez le voir sur le graphique, les étiquettes de l'axe des x sont classées en fonction de ma commande. Mais je ne peux pas commander l'axe des y. Donc, mes questions sont

  1. Comment puis-je commander l'axe des y? et
  2. Comment supprimer les NA?
  3. Seules les valeurs de couleur <0,05 et <0,01 et> 0,05, pas toutes.

Données

df = structure(list(Models = c("NDVI", "SR", "WBI", "NWI-1", "NWI-2", 
"NWI-3", "NWI-4", "1650/2220 nm ratio"), NDVI = c(NA, 0.008, 
0.017, 0.58, 0.02, 0.035, 0.067, 0.027), SR = c(NA, NA, 0.203, 
0.542, 0.618, 0.825, 0.007, 0.015), WBI = c(NA, NA, NA, 0.506, 
0.438, 0.086, 0.035, 0.067), `NWI-1` = c(NA, NA, NA, NA, 0.912, 
0.698, 0.868, 0.319), `NWI-2` = c(NA, NA, NA, NA, NA, 0.782, 
0.956, 0.268), `NWI-3` = c(NA, NA, NA, NA, NA, NA, 0.825, 0.166
), `NWI-4` = c(NA, NA, NA, NA, NA, NA, NA, 0.052), `1650/2220.nm.ratio` = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
)), row.names = c(NA, 8L), class = "data.frame")

La sortie doit ressembler à ce qui suit

Réponses

2 RonakShah Oct 06 2020 at 12:18

Essayez ce qui suit:

Commencez par obtenir les données au format long, puis modifiez les Modelsnoms des colonnes et des colonnes dans un ordre différent.

library(tidyverse)

fac_levels <- c("NDVI","SR","WBI","NWI-1","NWI-2","NWI-3","NWI-4","1650/2220 nm ratio")
df %>% 
  pivot_longer(-Models, values_drop_na = TRUE)  %>%
  mutate(Models = factor(Models, levels = fac_levels), 
         name = factor(name, levels = rev(fac_levels)),
         p.value = cut(value, c(max(value, na.rm = T), 0.05, 0.01, min(value, na.rm = T)),
                       labels = c("NS","< 0.05","< 0.01"))) %>%
  ggplot(aes(x=Models,y=name, fill=p.value)) +
  theme_bw() +
  geom_tile() + 
  xlab("Parameters") + ylab(" ") + 
  theme(text=element_text(size=18, family="serif"))+
  scale_colour_manual(values = c("#DAA520", "#F5DEB3", "#FFF8DC","#DCDCDC"),
                      aesthetics = c("colour", "fill")) +
  geom_text(aes(label=format(round(value, 2), nsmall = 2)), color="black", size=2) + 
  scale_x_discrete(drop=FALSE) +
  scale_y_discrete(drop=FALSE)