Pengurutan plot matriks menggunakan ggplot2

Oct 06 2020

Saya mencoba untuk merencanakan plot matriks menggunakan ggplot2. Saya menggunakan kode berikut

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)

yang mengembalikan saya plot berikut

Seperti yang Anda lihat dari plot, label sumbu x diurutkan menurut pesanan saya. Tapi saya tidak bisa memesan sumbu y. Jadi, pertanyaan saya adalah

  1. Bagaimana cara memesan sumbu y? dan
  2. Bagaimana cara menghapus NAs?
  3. Hanya nilai warna <0.05 dan <0.01 dan> 0.05, tidak semuanya.

Data

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")

Outputnya akan terlihat seperti berikut

Jawaban

2 RonakShah Oct 06 2020 at 12:18

Coba yang berikut ini:

Dapatkan data dalam format panjang terlebih dahulu, lalu ubah Modelsnama kolom dan keduanya menjadi faktor dalam urutan yang berbeda.

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)