用图层构建图像
创建绘图对象
需要使用ggplot2()
函数,两个主要参数
- 数据
- 图像属性映射
aes()
通过ggplot创建图形对象
p <- ggplot(diamonds, aes(carat, price, colour = cut))
图层
给图形对象添加一个“点”几何对象(point geom)就会得到一个散点图
p <- p + layer(geom = "point")
注意我们是如何用 + 来添加图层的。该图层使用了默认的数据集和图形属性映射,并且使用了另外两个可选参数的默认值:统计变换和位置调整。下面的图层设定列出了更多可选的参数选项。
手动创建图形对象并添加图层
p <- ggplot(diamonds, aes(x = carat))
p <- p + layer(geom = "bar",
geom_params = list(fill = "steelblue"),
stat = "bin",
stat_params = list(binwidth = 2))
p
应用“快捷函数”,得到与上例相同的图形
p + geom_histogram(binwidth = 2, fill = "steelblue")
所有这类快捷函数都有相同的形式——以geom_或者stat_开头
geom_XXX(mapping, data,.…, stat, position)
stat_XXX(mapping, data,…, geom, position)
其他参数后续内容会说明
下面将展示ggplot()和qplot()的等价用法
在用ggplot创建的图形对象上添加图层
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point()
# 等价于
qplot(sleep_rem/sleep_total, awake, data = msleep)
也可以给qplot添加图层
qplot(sleep_rem/sleep_total, awake, data = msleep) + geom_smooth()
# 等价于
qplot(sleep_rem/sleep_total, awake, data = msleep, geom = c("point", "smooth"))
# 等价于
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point() + geom_smooth()
例:用不同的数据初始化后添加相同的图层
图层是普通的R对象,所以可以存储到变量里去,这有利于代码避繁就简。例如,一组图形可以先用不同的数据来进行初始化,然后加上相同的图层,如果后面想改变图层,只需要修改一个地方即可。下面的例子创建了一个带有半透明深蓝色回归线的图层。
library(scales)
bestfit <- geom_smooth(method = "lm", se = F, colour = alpha("steelblue", 0.5), size = 2)
qplot(sleep_rem, sleep_total, data = msleep) + bestfit
qplot(awake, brainwt, data = msleep, log = "y") + bestfit
qplot(bodywt, brainwt, data = msleep, log = "xy") + bestfit
用%*%添加新的数据集来代替原来的数据集
p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point()
p
mtcars <- transform(mtcars, mpg = mpg^2)
p %+% mtcars
图形属性映射
aes函数的参数
aes(x = weight, y = height, colour = age)
这里我们将x坐标映射到weight
,y坐标映射到height
,colour
映射到age
。前两个参数可以省略名字,weight
和height
会自动匹配到x和y,这和qplot()
的用法是一致的。注意,你最好不要使用指定数据集以外的变量(例如diamonds$carat
),因为这样无法将绘图所用的数据都封装到一个对象里。
也可以使用变量的函数值作为参数
aes(weight, height, colour = sqrt(age))
图和图层
如下例所示,默认的图形属性映射可以在图形对象初始化时设定,或者过后用+修改。
p <- ggplot(mtcars)
summary(p)
p <- p + aes(wt, hp)
summary(p)
使用默认的参数映射来添加图层
p <- ggplot(mtcars, aes(x = mpg, y = wt))
p + geom_point()
修改图形属性。用factor(cyl)修改颜色(上),用disp修改y坐标(下)。
p + geom_point(aes(colour = factor(cyl)))
p + geom_point(aes(y = disp))