我可以根据站点标准为我的树状图着色吗

Posted

技术标签:

【中文标题】我可以根据站点标准为我的树状图着色吗【英文标题】:Can I colour my dendrogram based on site criteria 【发布时间】:2020-12-02 20:04:09 【问题描述】:

我真的很难让我的代码为真实数据工作! (第一个问题,如果不符合标准请见谅)

我正在尝试将植被调查的结果绘制为树状图,叶子/标签按预定义的标准着色,这绝对是可能的: https://cran.r-project.org/web/packages/dendextend/vignettes/FAQ.html 我的标签是站点名称,颜色应该是植被类型/位置(例如,如果我的站点的一半在小溪中而另一半不在,那么能够看到这些位置是如何在树状图中分开的将非常有用) .

我的“虚拟”代码执行我所追求的(3 种蔬菜类型,四个站点)

library(tidyverse)
  library(vegan)
  library(ggplot2)
  library(cluster)
library(dendextend)

Site <- c('Q1','Q1','Q1','Q2','Q2','Q2','Q3','Q3','Q3','Q4','Q4','Q4')
Species <- c('Malva','Sida','Corchorus','Tephrosia','Acacia','Triodia',
'Eucalyptus','Acacia','Triodia', 'Acacia', 'Triodia','Eucalyptus')
Presence <- as.numeric(c('1','1','1','1','1','1','1','1','1','1','1','1'))
SiteData <- data.frame(Site, Species, Presence)
Site <- c('Q1','Q2','Q3','Q4')
VegType <- c('VT7', 'VT2', 'VT5','VT5')
VegTypes <- data.frame(Site, VegType)
SiteWide <- pivot_wider(SiteData, names_from = Species, values_from = Presence, values_fill = list(Presence=0))
SiteWide <- SiteWide %>% column_to_rownames(var="Site") %>% as.data.frame()

dend <- as.dendrogram(hclust(dist(SiteWide)))
plot(dend)

#VegType <- rep("Other", length(rownames(VegTypes)))
is_x <- grepl("VT7", rownames(VegTypes))
VegType[is_x] <- "VT7"
is_x <- grepl("VT2", rownames(VegTypes))
VegType[is_x] <- "VT2"
is_x <- grepl("VT5", rownames(VegTypes))
VegType[is_x] <- "VT5"
VegType <- factor(VegType)
n_VegType <- length(unique(VegType))
cols_3 <- colorspace::rainbow_hcl(n_VegType, c = 70, l  = 50)
col_veg_type <- cols_3[VegType]

#color labels by vegetation type:
labels_colors(dend) <- col_veg_type[order.dendrogram(dend)]
plot(dend)

问题在于我的真实数据(16 种蔬菜类型,约 100 个站点)...我认为我的问题在最后,将 16 种颜色分配给蔬菜类型的顺序。任何有关如何正确编码的建议将不胜感激! (另外,我认为这是众多方法中的一种——我尝试了很多方法,但都无法奏效,所以这是我最后的手段!):(提前致谢!

#Code to load in vegetation types
VegTypes <- read.csv("VegTypeQuads.csv")
VegType <- rep("Other", length(rownames(VegTypes)))
#VegTypes$VegType <- as.factor(VegTypes$VegType)
is_x <- grepl("VT01", rownames(VegTypes))
VegType[is_x] <- "VT01"
is_x <- grepl("VT02", rownames(VegTypes))
VegType[is_x] <- "VT02"
is_x <- grepl("VT03", rownames(VegTypes))
VegType[is_x] <- "VT03"
is_x <- grepl("VT04", rownames(VegTypes))
VegType[is_x] <- "VT04"
is_x <- grepl("VT05", rownames(VegTypes))
VegType[is_x] <- "VT05"
is_x <- grepl("VT06", rownames(VegTypes))
VegType[is_x] <- "VT06"
is_x <- grepl("VT07", rownames(VegTypes))
VegType[is_x] <- "VT07"
is_x <- grepl("VT08", rownames(VegTypes))
VegType[is_x] <- "VT08"
is_x <- grepl("VT09", rownames(VegTypes))
VegType[is_x] <- "VT09"
is_x <- grepl("VT10", rownames(VegTypes))
VegType[is_x] <- "VT10"
is_x <- grepl("VT11", rownames(VegTypes))
VegType[is_x] <- "VT11"
is_x <- grepl("VT12", rownames(VegTypes))
VegType[is_x] <- "VT12"
is_x <- grepl("VT13", rownames(VegTypes))
VegType[is_x] <- "VT13"
is_x <- grepl("VT14", rownames(VegTypes))
VegType[is_x] <- "VT14"
is_x <- grepl("VT15", rownames(VegTypes))
VegType[is_x] <- "VT15"
is_x <- grepl("VT16", rownames(VegTypes))
VegType[is_x] <- "VT16"
VegType <- factor(VegType)
n_VegType <- length(unique(VegType))
cols_16 <- colorspace::rainbow_hcl(n_VegType, c = 70, l  = 50)
col_veg_type <- cols_16[VegType]

labels_colors(dend) <- col_veg_type[order.dendrogram(dend)] #this doesn't seem to do anything to my large data set

cl <- hclust(vegdist(data))
dend = as.dendrogram(cl)
VegTypes$VegType[cl$order]   #this gives me the veg types in the correct order (i.e. order that the corresponding site occurs in the dendrogram) 

plot(dend)

#not sure how to get the veg type colour into the dendrogram though!

【问题讨论】:

【参考方案1】:

我确实最终解决了这个问题。使用真实数据时,它是作为数据框导入的,所以我不得不将其作为向量输入:

SiteID <- as.vector(VegTypes$SiteID)
VegType <- as.vector(VegTypes$VegType)

【讨论】:

以上是关于我可以根据站点标准为我的树状图着色吗的主要内容,如果未能解决你的问题,请参考以下文章

我的网站只有登录层上的 https。是不是可以为我的站点实施服务人员以实施 chrome 通知

十一:将静态站点部署到本地文件系统

用于阻止大量站点流量的 IIS 模块

我可以根据查询制作表格吗?就像我数据库中不同字段/表的表单一样

我可以从站点地图生成 ASP.NET MVC 路由吗?

更改共享点站点的所有者