ggplot2-R箱线图编辑:移除NA列、统一时间序列箱宽
ggplot2分季节年度正磷酸盐箱线图问题解决方案
问题1:移除绘图中的NA列
你观察到的NA列不是因变量正磷酸盐的NA导致的,是Year或Season2字段存在NA值导致的。两种解决方法二选一即可:
- 方法1:绘图前过滤掉分组变量为NA的行,代码如下:
# 加载dplyr包用于数据过滤,如果没装先运行install.packages("dplyr") library(dplyr) df2_filtered <- df2 %>% filter(!is.na(Year), !is.na(Season2))
后续绘图用df2_filtered替代原数据即可。
- 方法2:直接在绘图时指定x轴展示的年份范围,若
Year是数值型变量,添加如下图层:
+ scale_x_continuous(breaks = c(2013:2019,2021), limits = c(2012.5, 2021.5))
若Year是因子型变量,添加如下图层:
+ scale_x_discrete(limits = as.character(c(2013:2019,2021)))
问题2:统一2021年与其他年份的箱线宽度
宽度不一致是因为2021年的Season2分组数量少于其他年份,ggplot默认每个x轴分组下的所有箱线总宽度固定,分组少的话单个箱线就会更宽。解决方法是在geom_boxplot()中添加preserve = "single"参数,强制所有单个箱线的宽度保持一致:
geom_boxplot(preserve = "single")
修改后的完整可运行代码
library(ggplot2) library(dplyr) # 先过滤掉分组变量的NA值 df2_filtered <- df2 %>% filter(!is.na(Year), !is.na(Season2)) p <- ggplot(df2_filtered, aes(x=Year, y=Ortho.P..µM, fill=factor(Season2))) + geom_boxplot(preserve = "single") # 新增参数统一箱宽 p + labs(title = "clark", x = "Year", y = "Orthophosphate(µM), Surface") + scale_fill_discrete(name = "Season") + theme(plot.title = element_text(hjust = 0.5)) + theme(text=element_text(family="Times New Roman", face="bold", size=14))
内容的提问来源于stack exchange,提问作者Sankar Manalilkada Sasidharan
相关产品推荐
相关产品推荐

