我有这个数据集:
## fips SCC Pollutant Emissions type year
## 4 09001 10100401 PM25-PRI 15.714 POINT 1999
## 8 09001 10100404 PM25-PRI 234.178 POINT 1999
## 12 09001 10100501 PM25-PRI 0.128 POINT 1999
## 16 09001 10200401 PM25-PRI 2.036 POINT 1999
## 20 09001 10200504 PM25-PRI 0.388 POINT 1999
## 24 09001 10200602 PM25-PRI 1.490 POINT 1999
'data.frame': 2096 obs. of 6 variables:
$ fips : chr "24510" "24510" "24510" "24510" ...
$ SCC : chr "10100601" "10200601" "10200602" "30100699" ...
$ Pollutant: chr "PM25-PRI" "PM25-PRI" "PM25-PRI" "PM25-PRI" ...
$ Emissions: int 6 78 0 10 10 83 6 28 24 40 ...
$ type : chr "POINT" "POINT" "POINT" "POINT" ...
$ year : int 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 ...
fips :表示美国县的五位数字(表示为字符串)
SCC :由数字字符串表示的源名称(参见源代码分类表)
污染物:表示污染物的字符串
排放:排放的PM2.5量,以吨计
type :来源类型(点,非点,路上或非道路)
年:记录的排放年份
我正在尝试在ggplot中制作一个情节,以确定这些年来根据来源类型的排放量是增加还是减少;我还想添加一个线性模型来显示趋势。
这是我到目前为止所做的:
GGplotGraph <- ggplot(PM25Baltimore, aes(x = year, y = Emissions, group = year, colour = type))
GGplotGraph <- GgplotGraph + geom_line() + facet_wrap(~ type) + theme(legend.position = "none")
GGplotGraph <- GgplotGraph + geom_smooth(method = "lm", formula = Emissions ~ year , se = FALSE, aes(group = 1)
这是我得到的图表,但我希望从1999年到2008年,这些线条是连续的。
在对该主题进行一些研究之后,我理解这种情况正在发生,因为grouping做错了。我尝试了各种组合,我将类型列转换为因子,但仍然不起作用。
我遇到的另一个问题是线性模型。我收到此错误:
Error in model.frame.default(formula = formula, data = data, weights = weight, :
variable lengths differ (found for '(weights)')
Error in if (nrow(layer_data) == 0) return() : argument is of length zero
我发现了here一些解释,但我在调试,追溯或恢复方面的技能非常有限。
我想就如何继续或下一步尝试提供一些建议。
答案 0 :(得分:1)
首先,我创建了一些测试数据,因为您的示例有点太短,无法重新定位
set.seed(18)
PM25Baltimore<-data.frame(
type = rep(c("Non-Road","Nonpoint","on-road","point"), each=10*10),
year = rep(1999:2008, 10*4),
Emissions = runif(10*4*10, 0,500)
)
所以我将使用stat_summary
而不是group
来折叠每个类型/年的多个观察值以使用平均值。我认为group=year
导致了你的“锯齿”问题。这将给我以下情节
ggplot(PM25Baltimore, aes(year, Emissions, color=type)) +
facet_wrap(~ type) + theme(legend.position = "none") +
stat_summary(fun.y="mean", geom="line") +
geom_smooth(method="lm", se=FALSE, linetype=3, color="black")