R:ggplot2(2),从qplot开始入门(2)

《ggplot2:数据分析与图形艺术》

第2章 从qplot开始入门

2.5 几何对象

2.5.2 箱线图和扰动点图

如果一个数据集中包含了一个分类变量和一个或多个连续变量,那么可以表示连续变量会如何随着分类变量水平的变化而变化。所以箱线图和扰动点图提供了各自的方法来达到这个目的。
> library(ggplot2)
> qplot(color, price/carat, data=diamonds, geom="jitter", color=I("blue"))
R:ggplot2(2),从qplot开始入门(2)
该图形考察以颜色(分类变量)为条件的每克拉价格(连续变量price/carat)的分布。

> qplot(color, price/carat, data=diamonds, geom="boxplot")
R:ggplot2(2),从qplot开始入门(2)
但从箱线图的结果来看,每克拉价格的跨度逐渐减小,但分布的中位数没有明显的变化。
但如果用dsmall数据的话,由于数据量太小则无法明确表示显著性的结果。
扰动点图中的图形重叠问题可以通过半透明颜色来部分解决,使用alpha参数。
> qplot(color, price/carat, data=diamonds, geom="jitter", color=I("blue"), alpha=I(1/100))
随着透明度的升高,我们可以看出数据集中的地方。
扰动点图不能像箱线图那样显示出四分位数的位置,但它体现了箱线图所不能展示的其他一些分布特征。
对于扰动点图来说,qplot可以提供像一般的散点图那样对其他图形属性的控制,如size,color和shape。对于箱线图,可以用color控制框线颜色,fill设置填充颜色,用size调节线的粗细。
> qplot(color, price/carat, data=diamonds, geom="boxplot", fill=color)#箱线图内部填充了颜色
R:ggplot2(2),从qplot开始入门(2)
> qplot(color, price/carat, data=diamonds, geom="boxplot", color=color, size=I(1.5))#箱线图改变了框线的颜色以及线条的粗细。
R:ggplot2(2),从qplot开始入门(2)
另外一种考察条件分布的方法是用分面来作出分类变量的每一个水平下连续变量的直方图或密度曲线。

2.5.3 直方图和密度曲线图

直方图和密度曲线图可以展示单个变量的分布,相对于箱线图而言,直方图和密度曲线图提供了更多的关于单个分布的信息,这种图形的作用是看不同的值在所出现的所有数值中的个数并进行统计; 而箱线图出了看单个变量的分布信息外,更大的作用是比较不同的组别间的差异(可以通过各组间的到的中位数值进行简单的比较)。
所以直方图和密度图不太容易在不同组之间进行比较(尽管我们将会看到一种可行的办法)。
> qplot(carat, data=diamonds, geom="histogram")#纵坐标表示数量,绘图时需要加上ylab=“count”。
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="density", ylab="count")
R:ggplot2(2),从qplot开始入门(2)
上述两张图的横坐标都是"carat",纵坐标都是"count"(表示数量)。

对于密度曲线图而言,adjust参数控制了曲线的平滑程度(adjust取值越大,曲线越平滑)。
> qplot(carat, data=diamonds, geom="density", ylab="count", adjust=10)
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="density", ylab="count", adjust=1)
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="density", ylab="count", adjust=0.1)
R:ggplot2(2),从qplot开始入门(2)

对于直方图,binwidth参数通过设定组距来调节平滑度。(切分位置同样可以通过breaks参数进行显示的指定。)绘制直方图或密度曲线时,对平滑程度进行试验非常重要。。在直方图中,你应该尝试多种组距:当组距较大时,图形能反映数据的总体特征;当组距较小时,则能显示出更多的细节。
> qplot(carat, data=diamonds, geom="histogram", binwidth=1, xlim=c(0,4), ylab="count")
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="histogram", binwidth=0.1, xlim=c(0,4), ylab="count")
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="histogram", binwidth=0.01, xlim=c(0,4), ylab="count")
R:ggplot2(2),从qplot开始入门(2)

尝试3种binwidth的取值: 1.0, 0.1和0.01。只有在最小组距图中(第三张图),我们能发现之前在散点图中出现的竖直方向的条纹,它们主要集中在“整0.5”的克拉数附近。
要在不同组之间对分布进行比对,只需要再加上一个图形映射,例如:
> qplot(carat, data=diamonds, geom="density", ylab="count", colour=color)#这里一定要写colour=color
R:ggplot2(2),从qplot开始入门(2)
> qplot(carat, data=diamonds, geom="histogram", ylab="count", binwidth=0.25, fill=color)
R:ggplot2(2),从qplot开始入门(2)

当一个分类变量被映射到某个图形属性上,几何对象会自动按这个变量进行拆分,因此上述命令会告诉qplot()对每一种钻石颜色都绘制一次密度曲线和直方图。

2.5.4 条形图

在离散变量的情形下,条形图与直方图相类似,绘制的方法是使用geom=“bar”。条形图几何对象会计算每一个水平下观测的数量,因此你不需要像在基础绘图系统的barchart中那样预先对数据进行汇总。如果数据已经进行了汇总,或者你想用其他的方式对数据进行分组处理(例如对连续变量进行分组求和),那么你可以使用weight几何对象(即对所要处理的数据进行加权处理,weight表示数据的权重值
> qplot(color, data=diamonds, geom="bar", ylab="count")#表示图形的分组计数
R:ggplot2(2),从qplot开始入门(2)
该图形显示的是分组的计数
> qplot(color, data=diamonds, geom="bar", weight=carat)+scale_y_continuous("carat")#weight=carat,carat数值是color的加权值
【ggplot2包绘图中会用到一类函数修改对应的标题,continuous用于非因子类型的数据,见如下函数:
scale_x_continuous:修改x轴标题,对应qplot(xlab="")
scale_y_continuous:修改y轴标题,对应qplot(ylab="")
scale_size_continuous:修改由aes(size=)构成的图例的标题,对应qplot(size="")
scale_fill_continuous:修改aes(fill=)所填充内容构成的图例的标题,对应qplot(fill="")
scale_color_continuous函数:修改aes(color=)指定构成的图例的标题,对应qplot(color="")
其中:xy轴continuous坐标轴标尺设定函数中最常用的参数是breaks、labels和limits,
#分别用于设置刻度位置、刻度标签和坐标轴范围】
(引用自http://blog.sina.com.cn/s/blog_ec05b5920102xtp0.html )
R:ggplot2(2),从qplot开始入门(2)
该图形是按照weight=carat进行加权,展示了每种颜色的钻石的总重量。
重要:如何绘制数据为0的条形图,通过weight权重的方法
> df <- data.frame(number=c(1,3,5,6,2,3,4,2,4,0,8,0,0,2,3,2,4,5), type=c('a','b','c','a','b','c','a','b','c','d','a','d','d','a','b','c','a','b'))
> qplot(type, data=df, geom="bar", weight=number)+scale_y_continuous("number")
R:ggplot2(2),从qplot开始入门(2)

2.5.5 时间序列中的线条图和路径图