如何在R中按采样日单独绘制数据集的直方图?
解决方案
第一步:规范日期列格式
先确保Date列是可识别的日期类型,避免分组出错:
# 根据你的实际日期格式调整format参数,比如"%Y/%m/%d"或"%d-%b-%Y" WPTD2$Date <- as.Date(WPTD2$Date, format = "%Y-%m-%d") # 转为因子,每个日期对应一个独立水平 WPTD2$Sampling_Day <- as.factor(WPTD2$Date)
用Base R绘制单采样日直方图
通过subset()筛选指定日期的数据,再传入hist():
# 绘制第一个采样日的直方图 hist(subset(WPTD2, Sampling_Day == levels(Sampling_Day)[1])$Distance, xlab = '垂直距离', ylab = '观测数量', main = paste('采样日', levels(Sampling_Day)[1], '垂直距离观测频率'), col = 'skyblue', breaks = 20) # 也可以直接指定具体日期值(比如"2024-05-01") hist(subset(WPTD2, Date == "2024-05-01")$Distance, xlab = '垂直距离', ylab = '观测数量', main = '2024-05-01 垂直距离观测频率', col = 'skyblue', breaks = 20)
用ggplot2绘制单采样日直方图
先筛选目标日期数据,再绘图:
ggplot(subset(WPTD2, Date == "2024-05-01"), aes(x=Distance)) + geom_histogram(binwidth = 5, boundary=0, fill="skyblue") + labs(x="垂直距离", y="观测数量", title="2024-05-01 垂直距离频率直方图")
一次性绘制所有采样日的直方图(分面展示)
如果需要同时展示4天的结果,用facet_wrap()实现分面布局:
ggplot(WPTD2, aes(x=Distance)) + geom_histogram(binwidth = 5, boundary=0, fill="skyblue", alpha=0.7) + facet_wrap(~Sampling_Day, ncol=2) # 按2列排列4个图 labs(x="垂直距离", y="观测数量", title="各采样日垂直距离频率直方图") + theme_bw() # 可选:切换为简洁主题
关于你之前尝试的说明
你用ave(WPTD2$Date, WPTD2$Transect nr., FUN = seq_along)生成的是每个样带内的观测序号,不是按日期分组的标识,所以无法用来筛选采样日数据,直接基于Date列处理即可。
内容的提问来源于stack exchange,提问作者Eonear Black
相关产品推荐
相关产品推荐

