如何使用ggplot2重新排序条形图并解决“could not find function "ggplot"”报错
解决ggplot报错及自定义排序需求的方案
首先解决报错问题
你遇到的could not find function "ggplot"错误,是因为没有加载ggplot2包。解决方法有两种:
- 在代码开头添加加载包的语句:
library(ggplot2) - 或者在调用ggplot时明确指定包名:
ggplot2::ggplot(g, aes(x=Locality.Division))
实现三个自定义排序需求
ggplot对分类变量的显示顺序是由变量的**因子水平(levels)**决定的,所以我们需要把对应的变量转换为指定顺序的因子,再进行绘图:
1. 自定义Number.of.Beetle的填充条形顺序
将Number.of.Beetle转换为因子,指定levels为你想要的顺序:c("0", "1-5", "6-10", "11-15", "15以上")
2. 自定义Locality.Division的x轴顺序
将Locality.Division转换为因子,指定levels为c("Village", "Municipality"),这样x轴会先显示Village,再显示Municipality
3. 自定义Building.Age的分面顺序
将Building.Age转换为因子,指定levels为c("5年以下", "5-10年", "10年以上"),分面就会按照这个顺序排列
完整可运行代码
# 加载ggplot2包 library(ggplot2) # 如果需要使用dplyr的mutate,记得加载dplyr(如果还没加载的话) # library(dplyr) # 转换分类变量为指定顺序的因子 g <- g %>% mutate( Number.of.Beetle = factor(Number.of.Beetle, levels = c("0", "1-5", "6-10", "11-15", "15以上")), Locality.Division = factor(Locality.Division, levels = c("Village", "Municipality")), Building.Age = factor(Building.Age, levels = c("5年以下", "5-10年", "10年以上")) ) # 绘制条形图 ggplot(g, aes(x = Locality.Division)) + geom_bar(aes(fill = Number.of.Beetle), position = "dodge") + facet_wrap(~Building.Age)
注:如果你的环境里没有安装
dplyr包,需要先运行install.packages("dplyr")安装,再加载它;如果你不想用dplyr,也可以用基础R的transform函数来转换因子,比如:g <- transform(g, Number.of.Beetle = factor(Number.of.Beetle, levels = c("0", "1-5", "6-10", "11-15", "15以上")), Locality.Division = factor(Locality.Division, levels = c("Village", "Municipality")), Building.Age = factor(Building.Age, levels = c("5年以下", "5-10年", "10年以上")) )
内容的提问来源于stack exchange,提问作者Sajidha Mohammed
相关产品推荐
相关产品推荐

