ggplot笔记002——qplot()函数
qplot()函数
一年前就听说过ggplot,很多人都说ggplot强大,ggplot无所不能,从今天开始就让我们一起来见证一下这个神奇的R包。
首先要加载ggplot2:
1 if(!suppressWarnings(require('ggplot2'))){
2 install.packages('ggplot2')
3 require('ggplot2')
4 }
先简单介绍一下diamonds数据集,diamonds数据集包含了约54000颗钻石的价格和质量信息。有
克拉重量(carat),切工(cut),颜色(color),净度(clarity)——反应钻石质量的四个'C'
深度(depth),钻面宽度(table),x , y, z——五个物理指标
但这个数据集没有经过很好的整理,在展示钻石一些有趣的关系时,会显示出一些质量问题。所以同时使用另一个数据集dsmall:它是一个容量为100的随机样本。
1 set.seed(1410)#让样本可重复
2 dsmall<-diamonds[sample(nrow(diamonds),100),]
3 dsmall[1:5,]
(一)qplot(quick plot)语法:
qplot(x, y = NULL, ..., data, facets = NULL,
margins = FALSE,geom = "auto", stat = list(NULL),
position = list(NULL), xlim = c(NA,NA), ylim = c(NA, NA), log = "", main = NULL,
xlab = deparse(substitute(x)),
ylab = deparse(substitute(y)), asp = NA)
注解:
x,y: 分别表示横坐标的值和纵坐标的值,比如书上直接用carat代表的x,price代表的y
... 为每个图层指定其他图形装饰属性,如颜色(colour)、形状(shape)、大小(size)等。
书上的colour=color,shape=cut,alpha=I(1/10)等
data: 数据集,比如书上用的data=diamonds
facets:图形/数据的分面,按数据进行分类,每一类做成一个图形,效果一页多图,默认一个图形
margins: 是否显示图形的边缘,默认不显示
geom: 图形的几何类型,如
geom='point'绘制散点图.设置了x和y时,默认为散点图
geom='smooth'将拟合一条平滑曲线(基于loess,gam,lm,rlm),图形展示了曲线和标准误(不想会标准误,se=FALSE)
geom='boxplot'可以绘制箱线胡须图,概括点的分布情况 x为属性变量,y为连续变量
geom='path'geom='line'绘制线条图
geom='histogram'绘制直方图,若有x参数时,默认为直方图
geom='freqploy'绘制频率多边形
geom='density'绘制密度图
geom='bar'绘制条形图
stat: 将数据统计与图形结合 (stat-statistic简写)
position: 调整图形位置
xlim与ylim: 指定x轴和y轴的范围
log: 横纵坐标对数转换
main: 添加标题
xlab与ylab: 添加x轴和y轴标签
(二)例子
钻石重量(carat)与价格(price)的散点图
钻石重量(carat)与体积(x*y*z)的散点图
钻石重量的对数【log(carat)】与价格的对数【log(price)】的散点图
1 qplot(carat,price,data = diamonds) 2 qplot(carat,x*y*z,data = diamonds) 3 qplot(log(carat),log(price),data = diamonds)
1 qplot(carat,price,data = dsmall,colour=color)#利用颜色分类 2 qplot(carat,price,data = dsmall,shape=cut)利用形状分类 3 qplot(carat,price,data = diamonds,alpha=I(1/10)) 4 qplot(carat,price,data = diamonds,alpha=I(1/200))#alpha 越小越透明
参数调整:method和span
method='loess' 默认平滑算法,平滑程度由span参数(从0【很不平滑】到1【很平滑】)控制。适用于数据小于1000
method='gam' formula=y~s(x)基于mgcv包。对于大数据则用formula=y~s(x,bs='cs'),这是数据量超1000时默认选项
method='lm' formula=y~poly(x,2)或用formula=y~ns(x,2)基于splines包
method='rlm' 基于MASS包,使得结果对异常值不太敏感
1 qplot(carat,price,data = dsmall,geom = c('point','smooth'), 2 method='loess',span=0.3)#绘制散点图+平滑曲线
1 library(mgcv) 2 qplot(carat,price,data = diamonds,geom = c('point','smooth'), 3 method='gam',formula = y ~ s(x),span=0.8) 4 qplot(carat,price,data = diamonds,geom = c('point','smooth'), 5 method='gam',formula = y ~ s(x,bs='cs'),span=0.2)
1 library(splines) 2 qplot(carat,price,data = dsmall,geom = c('point','smooth'), 3 method='lm',formula=y~poly(x,2),span=0.5) 4 qplot(carat,price,data = dsmall,geom = c('point','smooth'), 5 method='lm',formula=y~ns(x,5),span=1)
箱线图(geom='boxplot')和扰动点图(geom='jitter')
箱线图,用colour控制外框线的颜色,用fill填充颜色,用size调节线的粗细
直方图和密度曲线图
直方图: binwidth参数通过设定组距来调节平滑度(切分位置同样可以通过参数breaks参数进行显示指定)
密度曲线图:adjust参数控制了曲线的平滑程度(adjust取值越大,曲线越平滑)
1 qplot(carat,data = diamonds,geom = 'histogram',binwidth=0.1, 2 xlim = c(0,3),fill=color) 3 qplot(carat,data = diamonds,geom = 'density',binwidth=0.01, 4 xlim = c(0,5),fill=color)
条形图
1 qplot(color,data = diamonds,geom = 'bar',weight=carat)+ 2 scale_y_continuous('carat')
时间序列的线条图(将点从左到右进行连接)和路径图(按照点在数据集中的顺序对其进行连接)
1 a<-economics 2 a[1:5,]
1 qplot(date,unemploy/pop,data = economics,geom = 'line') 2 #显示了失业率的变化 3 qplot(date,uempmed,data = economics,geom = 'line') 4 #失业星期数的中位数