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

ggplot2绘制纬度与Neogloboquadrina_pachyderma丰度直方图报错及数据合并需求

ggplot2绘制纬度与Neogloboquadrina_pachyderma丰度直方图报错及数据合并需求

嘿,我来帮你搞定这个ggplot的问题!先给你拆解下报错原因,再一步步解决你的需求:

一、报错原因解析

你遇到的stat_bin() must only have an x or y aesthetic错误,本质是用错了图层:geom_histogram()是用来统计**单一轴上各区间的样本频数**的,它只需要一个x或者y美学映射就行,但你同时传了x=Latitude和y=Neogloboquadrina_pachyderma...35`,这就违反了它的设计逻辑,所以报错了。

另外先提个小细节:你的Neogloboquadrina_pachyderma...35列是字符型(从数据集里的引号能看出来),得先转成数值型才能做统计计算:

daten_neu$Neogloboquadrina_pachyderma...35 <- as.numeric(daten_neu$Neogloboquadrina_pachyderma...35)

二、解决报错+实现“纬度-丰度”可视化需求

你想要的是展示不同纬度下该物种的丰度,结合你提到的“多个点同纬度需要合并”的需求,给你两种方案:

方案1:先合并同纬度数据,再画柱状图(最直观)

先按纬度分组(可以是精确纬度,也可以是5度区间),计算每组的总丰度,再绘图:

library(dplyr)
library(ggplot2)

# 按5度纬度区间合并数据,计算总丰度
daten_summary <- daten_neu %>%
  # 把纬度分成每5度一组的区间
  mutate(Latitude_bin = cut(Latitude, breaks = seq(-90, 90, by = 5), include.lowest = TRUE)) %>%
  # 按区间分组,汇总总丰度
  group_by(Latitude_bin) %>%
  summarise(total_abundance = sum(Neogloboquadrina_pachyderma...35, na.rm = TRUE)) %>%
  ungroup()

# 绘制柱状图
ggplot(daten_summary, aes(x = Latitude_bin, y = total_abundance)) +
  geom_col(fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Abundance of Neogloboquadrina Pachyderma vs Latitude",
       x = "Latitude (5° bins)",
       y = "Total Abundance") +
  theme_minimal() +
  # 旋转x轴标签避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

如果你想按精确纬度值合并(不是区间),把上面的mutate去掉,直接按Latitude分组:

daten_summary_exact <- daten_neu %>%
  group_by(Latitude) %>%
  summarise(total_abundance = sum(Neogloboquadrina_pachyderma...35, na.rm = TRUE)) %>%
  ungroup()

ggplot(daten_summary_exact, aes(x = Latitude, y = total_abundance)) +
  geom_col(width = 0.8, fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Total Abundance of Neogloboquadrina Pachyderma by Exact Latitude",
       x = "Latitude",
       y = "Total Abundance") +
  theme_minimal()

方案2:用直方图的加权逻辑实现(适合保留区间统计)

如果你坚持想用直方图的形式,可以用weight参数把丰度作为权重,这样直方图的高度就代表该纬度区间的总丰度:

ggplot(daten_neu, aes(x = Latitude, weight = Neogloboquadrina_pachyderma...35)) +
  geom_histogram(binwidth = 5, fill = "lightblue", color = "black", alpha = 0.7) +
  labs(title = "Total Abundance of Neogloboquadrina Pachyderma by Latitude",
       x = "Latitude",
       y = "Total Abundance") +
  theme_minimal()

三、为什么这个方案能解决你的问题?

不管是先汇总数据再绘图,还是用加权直方图,都解决了两个核心问题:

  1. 避免了geom_histogram同时接收x和y的冲突,符合图层的设计逻辑
  2. 自动合并了同纬度/同纬度区间的多个数据点,把它们的丰度加总后展示,完美匹配你提到的“合并相同纬度点”的需求

备注:内容来源于stack exchange,提问作者Weiss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:42:57