ggplot2(二)

为图像添加平滑线

如果仅仅有数据的散点图,你可能很难看出数据的总体趋势。在这种情况下,给图像添加平滑线是很好的选择。在geom中添加"smooth"便可以轻松的完成这项任务。给geom参数设置一列向量可以组合多个几何图形元素。

qplot(carat, price, data = diamonds, geom = c("point", "smooth"))

平滑的算法也有很多可供选择:

method=“loess“:对于较小数据集的默认平滑算法,平滑程度由span参数来进行设定。span=0时线较为弯曲,span=1时最为平缓。

qplot(carat, price, data = dsmall, geom = c("point", "smooth"),span = 0.2)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),span = 1)


由于算法复杂度的原因,对于大的数据集loess并不是十分适用。

method="gam":当数据点大于1000时,这是默认的平滑算法。

library(mgcv)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),method = "gam", formula = y ~ s(x))


method="lm":用于线性模型。默认为一条直线,也可以用formula=y~poly(x,2)设置为二次函数拟合,或者加载splines包用formula=y~ns(x,2),第二个参数表示自由度,自由度越高拟合曲线也就越弯曲。

qplot(carat, price, data = dsmall, geom = c("point", "smooth"),method = "lm")
qplot(carat, price, data = dsmall, geom = c("point", "smooth"),method = "lm", formula = y ~ ns(x,5))

绘制箱线图和抖动图:

当一组数据既有分类变量又有连续变量的时候,你可能会对连续变量在不同分类下的变化感兴趣,箱线图和抖动图是实现这一目的的两种不同方法。

qplot(color, price / carat, data = diamonds, geom = "jitter",alpha = I(1 / 200))


qplot(color, price / carat, data = diamonds, geom = "boxplot")


直方图和密度图:

直方图和密度图可以形象的显示单一变量的分布规律,但是难以比较不同类之间分布的区别。

qplot(carat, data = diamonds, geom = "histogram")
qplot(carat, data = diamonds, geom = "density")



对于不同分类间的比较,可以像下面代码所示加一个外观参数选项:

qplot(carat, data = diamonds, geom = "density", colour = color)
qplot(carat, data = diamonds, geom = "histogram", fill = color)



柱状图:

离散变量的直方图即柱状图,用geom="bar"来设置。

qplot(color, data = diamonds, geom = "bar")
qplot(color, data = diamonds, geom = "bar", weight = carat) +scale_y_continuous("carat")



时间序列分析:

用含有时间数据的economics数据集,做失业率随时间变化的图像:

qplot(date, unemploy / pop, data = economics, geom = "line")


观察失业率与周失业人数中位数之间的关系:

year <- function(x) as.POSIXlt(x)$year + 1900
qplot(unemploy / pop, uempmed, data = economics,geom = "path", colour = year(date)) + scale_area()


分面:

我们已经讨论了如何利用外观参数在同一图中比较不同分类的差异。而分面可以将不同的亚类放在不同的图中进行比较:

qplot(carat, data = diamonds, facets = color ~ .,geom = "histogram", binwidth = 0.1, xlim = c(0, 3))



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章