如何在R中绘制7类地物的光谱响应散点图?
用R语言绘制地物光谱特征散点图
1. 安装并加载所需工具包
我们用tidyverse包(包含绘图工具ggplot2和数据处理工具),先安装并加载:
# 安装包(仅第一次使用时需要) install.packages("tidyverse") # 加载包 library(tidyverse)
2. 准备数据
模拟示例数据(可替换为你的真实数据)
以下代码模拟和你提供的示例结构一致的数据,你可以直接替换成自己的数据导入代码:
# 设置随机种子,保证结果可重复 set.seed(123) # 模拟7类地物、4个波段的数据 land_data <- data.frame( 土地类别 = rep(c("类别1", "类别2", "类别3", "类别4", "类别5", "类别6", "类别7"), each = 20), B2 = rnorm(140, mean = c(200, 220, 180, 250, 190, 230, 210), sd = 15), B3 = rnorm(140, mean = c(250, 270, 230, 300, 240, 280, 260), sd = 15), B4 = rnorm(140, mean = c(300, 320, 280, 350, 290, 330, 310), sd = 15), B8 = rnorm(140, mean = c(400, 450, 380, 500, 390, 460, 420), sd = 20) )
导入真实数据
如果你的数据是CSV格式,用以下代码导入(替换文件路径):
land_data <- read.csv("你的数据文件路径.csv", encoding = "UTF-8")
3. 转换数据格式
将宽格式数据转为长格式,方便按波段分组绘图:
land_data_long <- land_data %>% pivot_longer( cols = starts_with("B"), # 选择所有以B开头的列(即波段列) names_to = "波段", # 新列名:波段 values_to = "反射率" # 新列名:反射率数值 ) # 固定波段显示顺序(确保按B2→B3→B4→B8排列) land_data_long$波段 <- factor(land_data_long$波段, levels = c("B2", "B3", "B4", "B8"))
4. 绘制散点图(复现目标效果)
ggplot(land_data_long, aes(x = 波段, y = 反射率, color = 土地类别)) + # 添加抖动散点,避免重叠,调整透明度提升可读性 geom_jitter(width = 0.2, alpha = 0.6) + # 添加每个类别在各波段的均值点(实心菱形) stat_summary(fun = mean, geom = "point", size = 3, shape = 18) + # 用线连接同一类别的均值点,展示光谱趋势 stat_summary(fun = mean, geom = "line", aes(group = 土地类别)) + # 选择适合区分7类的颜色方案 scale_color_brewer(palette = "Set1") + # 设置图表标题和坐标轴标签 labs( title = "不同地物类型的光谱特征", x = "波段", y = "反射率数值", color = "土地类别" ) + # 使用简洁的白色主题 theme_bw() + # 让标题居中显示 theme(plot.title = element_text(hjust = 0.5))
关键说明
geom_jitter:解决散点重叠问题,width控制抖动幅度,alpha调整透明度stat_summary:自动计算每个类别在各波段的均值,用点和线展示整体光谱趋势,和目标图的核心效果匹配scale_color_brewer:内置调色板,能清晰区分7种土地类别
内容的提问来源于stack exchange,提问作者Erioderma
相关产品推荐
相关产品推荐

