如何使用ggplot绘制不同物种的年度数量增量折线图?
如何用ggplot绘制不同物种的年度数量增量折线图
嘿,刚上手ggplot完全不用焦虑!你的需求是把不同物种的年度数量变化做成折线图,还要区分Endangered (EN)和Vulnerable两个类别对吧?咱们一步步来,其实核心是先把数据转换成ggplot喜欢的长格式,然后就能轻松画图啦。
第一步:准备工作(加载包)
首先得加载tidyverse包,它包含了ggplot2(画图用)和tidyr(处理数据格式),不用分开装两个包:
library(tidyverse)
第二步:转换数据格式
你现在的数据是宽格式(每个物种一列),但ggplot更适合长格式(一列存物种名称,一列存对应数量)。咱们用pivot_longer()函数来转换:
假设你的数据框叫df,代码如下:
# 转换成长格式 df_long <- df %>% pivot_longer( cols = -c(Category, Year), # 保留Category和Year列,其他列都转成物种-数量对 names_to = "Species", # 新列:物种名称 values_to = "Count" # 新列:对应数量 )
转换后的数据大概是这样的结构(举个小例子):
| Category | Year | Species | Count |
|---|---|---|---|
| Endangered (EN) | 2019 | Mammals | 505 |
| Endangered (EN) | 2019 | Birds | 461 |
| Vulnerable | 2019 | Mammals | ... |
第三步:绘制折线图
现在数据格式对了,直接用ggplot画图就行。我们可以用分面(facet)来区分两个Category,每条折线对应一个物种:
ggplot(df_long, aes(x = Year, y = Count, color = Species)) + geom_line(linewidth = 1) + # 绘制折线,调整线宽 geom_point(size = 2) + # 加上数据点,更清晰 facet_wrap(~Category) + # 按Category分两个面板 labs( title = "不同物种的年度数量变化", x = "年份", y = "数量", color = "物种类型" ) + theme_minimal() + # 用简洁的主题 theme( plot.title = element_text(hjust = 0.5), # 标题居中 legend.position = "bottom" # 图例放底部,避免遮挡 )
一些小提示
- 如果你的数据里
Year是字符型,记得先转成数值型:df$Year <- as.numeric(df$Year),不然x轴会乱序 - 要是想给每个Category单独设置样式,或者调整折线颜色,可以用
scale_color_manual()自定义颜色 - 如果数量差距很大(比如Plants的数量远高于其他物种),可以考虑把y轴改成对数刻度:
scale_y_log10(),这样小数值的变化也能看清
这样就能得到你想要的可视化结果啦,试试吧!如果遇到问题随时提~
内容的提问来源于stack exchange,提问作者Tristanschn
相关产品推荐
相关产品推荐

