You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:18:01