R语言使用tidyr、ggplot2绘制Kite diagram坐标轴交换问题求助
风筝图(Kite Diagram)绘制错误修正方案
核心错误原因
- 你的原始数据结构为行对应quadrat_number(样方编号)、列对应物种,但参考旧帖的代码默认行是物种、列是X轴变量,长宽表转换逻辑完全颠倒,因此出现坐标轴互换、分组错误的问题。
修正后完整代码
基于ggplot2实现(可自定义程度更高)
# 加载所需依赖包 library(dplyr) library(tidyr) library(ggplot2) # 数据结构转换 dataprune_tidy <- dataprune %>% # 除quadrat_number外,其余列均为物种,转为长表结构 pivot_longer(cols = -quadrat_number, names_to = "species", values_to = "values") %>% # 固定物种顺序,避免绘图时顺序错乱 mutate(species = factor(species, levels = unique(species))) %>% # 构造Y轴坐标:每个物种对应一个固定Y值,预留足够间距展示风筝带宽度 mutate(NewY = as.numeric(species) * 2) %>% # 数值归一化,保证风筝带宽度不会超出物种间的间距 mutate(normval = values / max(values, na.rm = TRUE)) %>% # X轴直接使用样方编号数值即可 mutate(NewX = quadrat_number) # 绘制风筝图 ggplot(dataprune_tidy, aes(x = NewX, fill = species)) + geom_ribbon(aes(ymin = NewY - normval, ymax = NewY + normval), alpha = 0.7) + # Y轴替换为物种名称 scale_y_continuous(breaks = unique(dataprune_tidy$NewY), labels = levels(dataprune_tidy$species), name = "物种") + # X轴设置为样方编号 scale_x_continuous(name = "quadrat_number") + theme_bw()
基于plotrix包kiteChart快速实现
如果不需要复杂自定义,可直接对原数据转置后调用原生函数:
library(plotrix) # 转置数据:将物种转为行,样方编号转为列 dat_kite <- t(dataprune[, -1]) colnames(dat_kite) <- dataprune$quadrat_number # 绘图 kiteChart(dat_kite, xlab = "quadrat_number", ylab = "物种")
内容的提问来源于stack exchange,提问作者fis323
相关产品推荐
相关产品推荐

