如何用facet_wrap分离异常值数据?ggplot绘图问题求助
解决ggplot分面异常值分组问题
你的问题出在分面逻辑的写法上:country_name==c("China", "United States")这种向量匹配方式在R里会触发循环匹配,导致大量错误的判断结果,所以才会出现第一个子图混着所有国家的情况。
正确的做法是先给数据新增一个分组变量,把中美和其他国家明确分开,再用这个分组变量分面:
方法1(用dplyr处理数据)
library(ggplot2) library(dplyr) # 新增分组列:中美为一组,其余国家为另一组 CO2_GDP <- CO2_GDP %>% mutate( country_group = ifelse( country_name %in% c("China", "United States"), "China & United States", "Other Countries" ) ) # 绘图 ggplot(CO2_GDP, aes(x= GDP, y=value)) + geom_point(size=1)+ labs(title = "GDP and CO2 Emissions", y= "CO2 Emissions in Tons", x= "GDP in Billions of USD") + facet_wrap(~country_group)
方法2(base R处理数据,无需额外包)
library(ggplot2) # 新增分组列 CO2_GDP$country_group <- ifelse( CO2_GDP$country_name %in% c("China", "United States"), "China & United States", "Other Countries" ) # 绘图 ggplot(CO2_GDP, aes(x= GDP, y=value)) + geom_point(size=1)+ labs(title = "GDP and CO2 Emissions", y= "CO2 Emissions in Tons", x= "GDP in Billions of USD") + facet_wrap(~country_group)
关键说明
- 用
%in%替代==:%in%是R里检查元素是否属于某一集合的标准方法,能准确筛选出中美两国;而==搭配向量时会循环匹配短向量,导致大量错误判断。 - 新增分组变量后,分面逻辑清晰,两个子图会分别显示中美数据、其余国家数据,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Alix
相关产品推荐
相关产品推荐

