ggplot2笔记里面采用的是R里面内置的数据集进行画图的,数据的结构比较简单你,便于理解。笔记参考的图书是《数据分析实战 》by 【美】托马兹·卓巴斯(Tomasz Drabas),书可以从https://b-ok.global/上面直接下载,下载不了的如果想要图书可以留下邮箱。
第2章 快速探索数据
qplot() 函数
它的语法与基础绘图系统类似,对于每一个由qplot() 函数绘制的图形,技巧中也提供了用更强大的ggplot() 函数来绘图的等价解决方案。
2.1 绘制散点图
那么如何绘制散点图?
使用plot() 函数可绘制散点图,运行命令时依次传递给plot() 函数一个向量x 和一个向量y
plot(mtcars$wt,mtcars$mpg)
对于ggplot2系统,可用qplot() 函数得到相同的绘图结果
library(ggplot2)
qplot(mtcars$wt, mtcars$mpg)
如果绘图所用的两个参数向量包含在同一个数据框内,则可以运行下面的命令
qplot(wt,mpg,data=mtcars)
这与下面等价
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point()
2.2 绘制折线图
如何绘制折线图?
使用plot() 函数绘制折线图(见图2-3左图)时需向其传递一个包含x 值的向量和一个包含y 值的向量,并使用参数type="l"
plot(pressure$temperature, pressure$pressure, type="l")
如果要向图形中添加数据点或者多条折线,则需先用plot() 函数绘制第一条折线,再通过points() 函数和lines() 函数分别添加数据点和更多折线
plot(pressure$temperature, pressure$pressure, type="l")
points(pressure$temperature,pressure$pressure)
lines(pressure$temperature, pressure$pressure/2, col="red")
points(pressure$temperature, pressure$pressure/2, col="red")
在ggplot2中,可以使用qplot() 函数并将参数设定为geom="line" 得到类似的绘图结果
library(ggplot2)
qplot(pressure$temperature, pressure$pressure, geom="line")
如果函数的两个参数向量已包含在同一个数据框中,则可以运行下面的语句
qplot(temperature,pressure, data=pressure, geom="line")
这等价于下面的命令
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line()
添加数据点
qplot(temperature, pressure, data=pressure, geom=c("line", "point"))
这等价于下面的命令
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() + geom_point()
2.3 绘制条形图
如何绘制条形图?
对变量的值绘制条形图,可以使用barplot() 函数,并向其传递两个向量作为参数,第一个向量用来设定条形的高度,第二个向量用来设定每个条形对应的标签
如果向量中的元素已被命名,则系统会自动使用元素的名字作为条形标签
barplot(BOD$demand, names.arg=BOD$Time)
有时候,“条形图”表示的是分组数据中各个元素的频数(这一点非常重要,柱子的高度表示的是频数)
这种条形图跟直方图有些类似,不过,其用离散取值的x 轴替代了直方图中连续取值的x 轴。要计算向量中各个类别的频数,可以使用table() 函数
table(mtcars$cyl)
首先在对数据进行处理之前要对自己的数据有充分的认识
只需将上面的表格结果传递给barplot() 函数即可绘制频数条形图
生成频数表
barplot(table(mtcars$cyl))
qplot() 函数也可以用来绘制分组变量的频数条形图,事实上,这是ggplot2绘制条形图的默认方式,它比绘制变量值条形图的命令更简短。再提醒一次,注意连续x 轴和离散x 轴的差异
cyl是连续变量
qplot(mtcars$cyl)
将cyl转化为因子型变量
qplot(factor(mtcars$cyl))
如果参数向量包含在同一个数据框内,则可以运行下面的语句
变量值条形图,这里用BOD数据框中的Time列
ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")
频数条形图
qplot(factor(cyl), data=mtcars)
这与下面的语句等价
ggplot(mtcars, aes(x=factor(cyl))) + geom_bar()
2.4 绘制直方图
如何绘制直方图来查看一维数据的分布特征?
可以使用hist() 函数绘制直方图,使用时需向其传递一个向量
hist(mtcars$mpg)
通过breaks参数指定大致组距,具体可以查看?hist的帮助文档里面的介绍
hist(mtcars$mpg,breaks=10)
对于ggplot2包,可以使用qplot() 函数得到同样的绘图结果
qplot(mtcars$mpg)
如果参数向量在同一个数据框内,则可以使用下面的语句
library(ggplot2)
qplot(mpg, data=mtcars, binwidth=4)
这等价于
ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4)
2.5 绘制箱线图
如何绘制箱线图以对不同分布进行比较?
使用plot() 函数绘制箱线图时向其传递两个向量:x 和y 。当x 为因子型变量(与数值型变量对应)时,它会默认绘制箱线图,可以class(ToothGrowth)查看一下ToothGrowth的数据类型。
plot(ToothGrowth$supp, ToothGrowth$len)
当两个参数向量包含在同一个数据框中时,也可以使用公式语法。公式语法允许我们在x 轴上使用变量组合
公式语法
boxplot(len ~ supp, data = ToothGrowth)
在x轴上引入两变量的交互
boxplot(len ~ supp + dose, data = ToothGrowth)
对于ggplot2包,qplot() 函数可以绘制同样的图形,使用时将参数设定为geom="boxplot"
library(ggplot2)
qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")
当两个参数向量在同一个数据框内时,则可以使用下面的语句
qplot(supp, len, data=ToothGrowth, geom="boxplot")
这等价于
ggplot(ToothGrowth, aes(x=supp,y=len)) + geom_boxplot()
使用interaction() 函数将分组变量组合在一起也可以绘制基于多分组变量的箱线图
dose 变量是数值型,因此,我们必须先将其转化为因子型变量,再将其作为分组变量
使用三个独立的向量参数
qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,geom="boxplot")
也可以以数据框中的列作为参数
qplot(interaction(supp, dose), len, data=ToothGrowth, geom="boxplot")
这等价于
ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot()
需要注意的是:基础绘图系统绘制的箱线图与ggplot2略有不同。这是因为两者在绘图过程中调用的计算分位数的方法略有差异
运行?geom_boxplot 和?boxplot.base 命令可以得到更多关于两者差异的细节信息
?geom_boxplot
?boxplot.base
2.6 绘制函数图像
如何绘制函数图像?
可以使用curve() 函数绘制函数图像。使用时需向其传递一个关于变量x 的表达式
curve(x^3 - 5*x, from=-4, to=4)
将参数设置为add=TRUE 可以向已有图形添加函数图像
也可以绘制自己定义的函数图像
myfun <- function
(xvar) {
1/(1 + exp(-xvar + 10))
}
curve(myfun(x), from=0, to=20)
# 在原来函数的基础上添加红色的曲线
curve(1-myfun(x), add = TRUE, col ="red")
也可以使用ggplot()函数进行绘制
library(ggplot2)
# 这等价于
ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")