如何解决ggplot中的锯齿模式?

时间:2014-05-19 01:44:49

标签: r ggplot2

我有这个数据集:

##     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年,这些线条是连续的。

img

在对该主题进行一些研究之后,我理解这种情况正在发生,因为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一些解释,但我在调试,追溯或恢复方面的技能非常有限。

我想就如何继续或下一步尝试提供一些建议。

1 个答案:

答案 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")

sample plot with averaged y values and regression lines