需要使用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(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point()
# 等价于
qplot(sleep_rem/sleep_total, awake, data = msleep)
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(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()
p + geom_point(aes(colour = factor(cyl)))
p + geom_point(aes(y = disp))