繁体   English   中英

使用 ggplot2 对矩阵图进行排序

[英]Ordering matrix plot using ggplot2

我正在尝试使用ggplot2绘制矩阵图。 我正在使用以下代码

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)

它返回给我以下情节

在此处输入图片说明

从图中可以看出,x 轴标签是根据我的顺序排列的。 但我无法订购 y 轴。 所以,我的问题是

  1. 我如何订购 y 轴?
  2. 如何去除NA?
  3. 只有颜色值 < 0.05 和 < 0.01 和 > 0.05,不是全部。

数据

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

输出应如下所示在此处输入图片说明

尝试以下操作:

首先以长格式获取数据,然后将Models和列名称更改为不同顺序的因子。

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) 

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM