ggplot学习笔记(四)

从本期开始学习折线图的内容。

考虑gapminder数据集中每个国家的期望寿命随时间(年)的变化。 用geom_line()可以画折线图。 因为有许多国家,所以仅指定x、y变量无法得到所需图形,如:

p<- ggplot(data = gapminder,mapping=aes(x=year, y=lifeExp))p+ geom_line()

没有得出我们希望的每个国家一条曲线的效果。 这是因为程序中没有指定需要按照国家分组, 使得同一年的不同国家的坐标连成了一条竖线。要注意的是, geom_line()会自动将x坐标从小到大排序, 然后再连接相邻的点。 如果希望按输入数据的次序连接相邻的点, 需要用geom_path()函数。为了解决上图的问题, 加入按照国家分组的设定。 实际上, 分组(group)与x、y、color、fill一样可以映射到一个变量, 但仅能映射到分类变量。 上述程序的改进如下:

p<- ggplot(data = gapminder,mapping=aes(x=year, y=lifeExp,group=country))p+ geom_line()

结果图形中每一条曲线对应一个国家。 为了查探其中最下方的不稳定曲线是哪一个国家,使用筛选观测的功能:

gapminder %>%filter(lifeExp<30,year>= 1990)

## # A tibble: 1 x 6##  country continent  year lifeExp    pop gdpPercap##                ## 1 Rwanda  Africa    1992    23.6 7290203      737.

该国家为Rwanda。如果需要按照两个或多个分类变量交叉分组, 可以给group维指定interaction(...), 其中...是分类变量表。 geom_line()用来绘制从左向右连接的折线。 比如, 仅绘制Rwanda的期望寿命时间序列:

p<-ggplot(data=filter(gapminder,country=="Rwanda"),mapping=aes(x=year,y=lifeExp))p+geom_line()

如果需要每个点画出散点符号, 可以同时使用geom_point(),如:

p+ geom_line() +  geom_point()

用geom_area()作类似图形, 但在折线下方填充颜色:

p<-ggplot(data=filter(gapminder,country=="Rwanda"),mapping=aes(x=year,y=lifeExp))p+geom_area(fill="darkseagreen1",alpha=0.5)

这种图形的纵坐标应该从0开始, 使得阴影部分的大小与纵坐标值成比例, 这也是ggplot2的默认做法。连线图还有一个问题, 就是如果x坐标不是数值型变量而是因子或者字符型, 则两点之间不会相连。 比如,将gapminder的Rwanda子集中的year转换成因子,再画折线图:

d <- gapminder %>%filter(country =="Rwanda") %>%mutate(year = factor(year, levels = seq(1952, 2007, by=5)))p <- ggplot(data = d, mapping = aes(x= year,y= lifeExp))p + geom_line()

## geom_path: Each group consists of only one observation. Do you need to## adjust the group aesthetic?

没有得到应有的结果。 这是因为因子year起到了分组作用, 相当于每个年份为一组, 连线只能在组内连, 但每组仅有一个观测。 这时, 显式地指定group变量可以解决问题:

d<-gapminder%>%  filter(country == "Rwanda") %>%  mutate(year = factor(year, levels = seq(1952, 2007, by=5)))p<-ggplot(data=d,mapping=aes(x=year,y=lifeExp,group=country))p+geom_line()

你可能感兴趣的:(ggplot学习笔记(四))