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

硕士论文R语言Kite Diagram绘制求助:缺失风筝结构

R语言Species为Y轴的Kite Diagram绘制问题解决

问题根源

原代码使用geom_area配合离散型Y轴(Species)与正负Abundance值无法生成风筝形态,核心原因是离散Y轴的每个物种对应固定坐标位置,height参数无法在该位置产生对称的扩展效果,最终仅呈现条形结构。

解决思路与修改后的代码

将离散物种转换为连续数值型Y基准位置,通过geom_ribbon定义每个物种在对应日期的上下对称边界,实现风筝形态:

setwd("C:/Users/elisa/Documents/Jena/Elisa Wendisch/R_Files/Kite")
# 修正sep参数的注释错误
data <- read.table(file = "KITE_DipteraS1.txt", header = TRUE, dec = ",", sep = "\t", na.strings = TRUE)

# 清理列名中的X前缀和空格
colnames(data) <- gsub("^X", "", colnames(data))
colnames(data) <- trimws(colnames(data))

# 宽表转长表
library(reshape2)
data_long <- melt(data, id.vars = "Species", variable.name = "Date", value.name = "Abundance")

# 转换日期格式,过滤缺失值
data_long$Date <- as.Date(data_long$Date, format = "%d.%m.%Y")
data_long$Species <- as.factor(data_long$Species)
data_long <- data_long[!is.na(data_long$Abundance), ]

# 1. 将物种转换为连续数值型Y基准位置
data_long$y_base <- as.numeric(data_long$Species)
# 2. 缩放丰度值(根据数据范围调整scale_factor,避免物种区域重叠)
scale_factor <- 0.1
data_long$ymin <- data_long$y_base - (data_long$Abundance * scale_factor)
data_long$ymax <- data_long$y_base + (data_long$Abundance * scale_factor)

# 绘制风筝图
library(ggplot2)
ggplot(data_long, aes(x = Date, ymin = ymin, ymax = ymax, fill = Species)) +
  geom_ribbon(alpha = 0.7) +
  theme_minimal() +
  labs(title = "Kite Diagram", x = "Date", y = "Species") +
  # 将数值型Y轴还原为物种名称
  scale_y_continuous(breaks = unique(data_long$y_base), labels = unique(data_long$Species)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 8)) +
  scale_fill_viridis_d(option = "plasma") +
  scale_x_date(date_breaks = "5 days", date_labels = "%d.%m.%Y")

关键说明

  • y_base:将每个物种映射到连续数值,作为对称扩展的中心位置
  • scale_factor:根据你的丰度数据范围调整,确保不同物种的区域不会过度重叠
  • geom_ribbon:通过ymin和ymax定义每个日期下物种丰度对应的上下边界,自然形成对称的风筝形态

内容的提问来源于stack exchange,提问作者Enix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:05:02