查看原文
其他

R语言可视化——折线图、平滑曲线及路径图

2016-09-25 小魔方 数据小魔方

今天跟大家讲关于路径图、平滑曲线与折线图及其美化。


这里涉及到三个设计线条的特殊图层函数:


geom_smooth()、geom_path()、geom_line()


下面分别讲解:


关于geom_smooth():平滑曲线


ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth()





平滑曲线专门用于对于散点图趋势的拟合,geom_smooth函数内部有默认的拟合规则(根据统计统计算法计算出的拟合规则,而非实际的点)。


其中的括号内有默认的method参数,代表着拟合曲线所用到的统计算法,se代表着误差范围。(就是围绕着拟合直线的颜色带)。


method中的类型常见的有lm\glm\gam\loess\rlm等,当数据集记录小于1000时,method的默认参数即为loess,大于1000时则为gam。


本例所用到mpg数据集只有234个记录,使用geom_smooth参数应该默认使用的方法参数就是loess,这里我们可以检验一下:


ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth(method="loess")




误差范围的颜色带是可以通过se参数进行控制的,默认se=TRUE,这里设置为se=FALSE。


ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth(method="loess",se=FALSE)




接下来我们依次尝试其他几个拟合曲线:


ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth(method="lm",se=FALSE)




ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth(method="glm",se=FALSE)




ggplot(mpg,aes(cty,hwy))+geom_point()+geom_smooth(method="gam",se=FALSE)





看上去没啥太大区别,可能是数据集太小的原因吧。


路径图:geom_path()


以上函数参数可以画出路径图,其实就是根据每一个数据点的出现先后顺序,依次链接所有点所形成的路径:


ggplot(mpg,aes(cty,hwy))+geom_path()




这种图乍看起来没啥意义,但是在某些特殊场景下,却能够表达出非常重要的信息,比如候鸟迁徙、病毒传播、甚至飞机航线等领域。


ggplot(mpg,aes(cty,hwy))+geom_point()+geom_path()




可以同时添加点函数和路径函数,制作出带有点标记的路径图。


ggplot(mpg,aes(cty,hwy))+geom_point(colour="steelblue")+geom_path(colour="red")




每一个图层函数内的图层对象都是可以单独定义颜色的。


折线图:geom_line()


以上是直线图的图层函数;它与路径图的唯一区别就是,在连接各点之前,会按照x轴数据对总体升序排列,所以最终的连线是非常清晰的顺序折线,不会存在交叉。(而路径图则按照实际数据点在数据集中出现的先后顺序依次联结)。


ggplot(mpg,aes(cty,hwy))+geom_line(colour="steelblue")




ggplot(mpg,aes(cty,hwy))+geom_point(colour="black")+geom_line(colour="steelblue")





为了更加明显的看出两者区别,我们换一个变量:


ggplot(CO2,aes(uptake,conc))+geom_line(colour="steelblue")+geom_point(colour="black")




ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line(colour="steelblue")+geom_point(colour="white",shape=21,size=4,fill="Tomato")




加入分类变量后的折线图:


ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line()+geom_point(colour="white",shape=21,size=4,fill="Tomato")




默认的折线线条位置参数应该position=identity,我们也可以尝试使用其他几个参数


ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line(position="identity")+geom_point(colour="white",shape=21,size=4,fill="Tomato")




ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line(position="stack")+geom_point(colour="white",shape=21,size=4,fill="Tomato",position="stack")




ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line()+facet_grid(.~Species)+geom_point   (colour="white",shape=21,size=4,fill="Tomato")   #分面组图:




ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line()+facet_grid(.~Species)+geom_point   (colour="white",shape=21,size=4,fill="Tomato") +theme_wsj("rgby","")+scale_colour_wsj()+ggtitle("line plot")+guides(colour=guide_legend(title=NULL))  




ggplot(iris,aes(Sepal.Length,Sepal.Width,colour=Species))+geom_line()+facet_grid(.~Species)+geom_point   (colour="white",shape=21,size=4,fill="Tomato") +theme_economist()+scale_colour_economist()+ggtitle("line plot")+guides(colour=guide_legend(title=NULL))  



魔方学院QQ群:


QQ群:

微信群:



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存