我已经在广泛的范围内搜索了SO和Internet,但无法找到解决该问题的原因或解决方案。当使用ggplot2
绘制时间序列类型数据时,我似乎总是有一条垂直线连接我的点,而不是单点绘制并随时间简单地通过线连接点。这是使用mpg
的示例。
require(ggplot2)
gg <- ggplot(mpg, aes(x=year, y=cty,
group=manufacturer, colour=manufacturer))
gg + geom_point() + geom_line()
是否可以删除连接点的垂直线?为何ggplot2
会这样做?感谢您的提前帮助!
根据下面的向下投票和问题进行编辑。
也许mpg
并不是用作示例的最佳数据集。我在定义的时间点有多个针对个人的观察结果,我想通过结合geom_point()
和geom_line()
进行绘制。但是,在每个时间点,我个人的观察点(点)也都与一条垂直线相连-我不知道这意味着什么以及如何将其删除。是因为我在同一时间点对同一个人有多个观察结果?
这是一个有助于说明问题的数据集。
dput(x1)
structure(list(Assessment_Time = structure(c(1L, 2L, 1L, 1L,
2L, 2L, 3L, 3L, 4L, 4L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 4L, 4L, 4L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 4L, 4L,
6L, 6L, 2L, 3L, 3L, 2L, 2L, 3L, 3L, 4L, 4L, 1L, 1L, 2L), .Label = c("Initial",
"First follow-up", "Second follow-up", "Third follow-up", "Fourth follow-up",
"Fifth follow-up"), class = "factor"), id = c(454316L, 454316L,
1184099L, 1184099L, 1184099L, 1184099L, 1184099L, 1184099L, 1184099L,
1184099L, 124227L, 124227L, 124227L, 124227L, 124227L, 124227L,
124227L, 124227L, 124227L, 124227L, 124227L, 124227L, 124227L,
124227L, 1227808L, 1227808L, 1234280L, 1234280L, 1234280L, 1234280L,
1233898L, 1233898L, 1233898L, 1233898L, 1233898L, 1233898L, 1233898L,
1233898L, 1191086L, 1191086L, 1191086L, 1232973L, 1232973L, 1232973L,
1232973L, 1232973L, 1232973L, 1251251L, 1251251L, 1251251L),
US_thickest_um = c(3400, 1500, 7600, 6000, 6600, 4500, 6100,
4000, 6400, 3500, 2300, 2400, 3400, 2200, 1500, 2500, 2100,
1500, 2500, 1700, 1700, 3800, 2800, 2800, 2300, 1300, 6000,
3200, 3800, 1900, 5400, 6200, 2200, 3000, 1900, 2100, 1900,
2500, 4600, 2800, 2100, 3400, 1900, 2400, 1700, 2100, 1300,
2800, 4000, 3700)), .Names = c("Assessment_Time", "id", "US_thickest_um"
), row.names = c(NA, -50L), class = c("tbl_df", "tbl", "data.frame"
))
gg <- ggplot(x1, aes(x=Assessment_Time, y=US_thickest_um, group=factor(id)))
gg + geom_point(aes(colour=factor(id))) + geom_line(aes(colour=factor(id)))
答案 0 :(得分:1)
目前尚不清楚您的目标是什么,但可以说它是比较1999年和2008年每个制造商的平均值,并通过绘制各个点来显示变化。
您可以执行类似的操作,不断尝试选项,直到获得所需的方式为止。
means <- mpg %>% dplyr::group_by(year, manufacturer) %>% dplyr::summarize(cty = mean(cty))
ggplot(mpg, aes(x=year, y = cty)) +
geom_jitter(aes(colour = manufacturer), width = 0.15) +
geom_line(data = means, aes(group = manufacturer, colour = manufacturer))
答案 1 :(得分:0)
您需要重新考虑绘图设计。
只有两年。因此,这不能成为经典的时间序列折线图。
library(tidyverse)
table(mpg$year)
year n
<int> <int>
1 1999 117
2 2008 117
替代品之一可以是
gg <- ggplot(mpg, aes(x=manufacturer, fill = as.factor(cyl)))
gg + geom_bar(stat = "count") +
facet_wrap(~year) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
答案 2 :(得分:0)
目前尚不清楚您要做什么。您指的是时间序列数据,但实际上使用的是完全不同的东西:mpg
或更新的样本数据都不是时间序列数据。
我假设,您要问的是如何在ggplot
中绘制时间序列数据并以不同的彩色线条编码不同的时间序列。这是一个简单的示例,可以帮助您入门。
首先,让我们生成10个时间序列的数据。
ts <- replicate(
10,
ts(cumsum(1 + round(rnorm(100), 2)), start = c(1954, 7), frequency = 12),
simplify = FALSE)
我们将ts
个对象转换为data.frame
个列表。
lst <- lapply(setNames(ts, paste0("series_", 1:10)), function(x)
data.frame(Y = as.matrix(x), date = as.Date(as.yearmon(time(gnp)))))
我们现在通过将id
映射到colour
美学来绘制数据,以将10个不同的时间序列显示为10种颜色不同的折线图。
library(tidyverse)
dplyr::bind_rows(lst, .id = "id") %>%
ggplot(aes(date, Y, colour = as.factor(id))) +
geom_line()