我试图在R中创建一个线图,显示不同位置的线条。
我的数据位于第一列中Year
的表格中,地点England, Scotland, Wales, NI
为单独的列:
Year England Scotland Wales NI
1 2006/07 NA 411 188 111
2 2007/08 NA 415 193 112
3 2008/09 NA 424 194 114
4 2009/10 NA 429 194 115
5 2010/11 NA 428 199 116
6 2011/12 NA 428 200 116
7 2012/13 NA 425 199 117
8 2013/14 NA 427 202 117
9 2014/15 NA 431 200 121
10 2015/16 3556 432 199 126
11 2016/17 3436 431 200 129
12 2017/18 3467 NA NA NA
我正在使用ggplot,并且可以获得任何地方的线图,但是我很难在同一个地块上获取所有地点的线条。
如果我在列中也有位置(而不是在顶部),似乎这可能会起作用,因为我可以在下面的代码中将y设置为该列,而不是列。特定的地方。但这似乎有点复杂,因为我现有的格式中有很多数据,我希望有一种方法可以用我的格式或者快速转换它来实现这一点。
ggplot(data=mysheets$sheet1, aes(x=Year, y=England, group=1)) +
geom_line()+
geom_point()
据我所知,我需要重新塑造我的数据(长篇形式?)但是我还没有找到一种方法可以做到这一点我没有地方专栏(也就是说,我每个地方都有一个专栏,但是表格没有办法说这些都是地方和同类的东西)。
我也尝试过调换我的数据,所以这些地方都在旁边而且年份都在顶部,但R仍然有自己的列标题 - 我想另一个选择可能是如果可能的话将这些年份作为标题并由R识别?
答案 0 :(得分:2)
正如您所说,您必须转换为长格式才能充分利用ggplot2
。
library(ggplot2)
library(dplyr)
mydata_raw <- read.table(
text = "
Year England Scotland Wales NI
1 2006/07 NA 411 188 111
2 2007/08 NA 415 193 112
3 2008/09 NA 424 194 114
4 2009/10 NA 429 194 115
5 2010/11 NA 428 199 116
6 2011/12 NA 428 200 116
7 2012/13 NA 425 199 117
8 2013/14 NA 427 202 117
9 2014/15 NA 431 200 121
10 2015/16 3556 432 199 126
11 2016/17 3436 431 200 129
12 2017/18 3467 NA NA NA"
)
# long format
mydata <- mydata_raw %>%
tidyr::gather(country, value, England:NI) %>%
dplyr::mutate(Year = as.numeric(substring(Year, 1, 4))) # convert to numeric date
ggplot(mydata, aes(x = Year, y = value, color = country)) +
geom_line() +
geom_point()