R数据可视化手册笔记--Chapter2:快速探索数据

作者:gxynikita

knitr::opts_chunk$set(echo = TRUE)

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()函数绘制折线图时需向其传递一个包含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)
## 
##  4  6  8 
## 11  7 14

值为4的频数为11,6的为7,8的为14

只需将上面的表格结果传递给barplot()函数即可绘制频数条形图:

#生成频数表
barplot(table(mtcars$cyl))

这里写图片描述
对于ggplot2系统,可以使用qplot()函数得到类似的绘图结果。绘制变量值的条形图时,需将参数设定为geom=”bar”和stat=”identity”。注意变量x分别为连续取值和离散取值时输出结果的差异。

library(ggplot2)

#qplot(BOD$Time,BOD$demand,geom="bar",stat="identity")
#Error: stat_count() must not be used with a y aesthetic.
#In addition: Warning message:
#  `stat` is deprecated 

#将x转化为因子型变量,令系统将其视作离散值
#qplot(factor(BOD$Time),BOD$demand,geom="bar",stat="identity")
#Error: stat_count() must not be used with a y aesthetic.
#In addition: Warning message:
#  `stat` is deprecated 

qplot()函数也可用来绘制分组变量的频数条形图,事实上,这是ggplot2绘制条形图的默认方式,它比绘制变量值条形图的命令更简短。

注意连续x轴和离散x轴的差异

#cyl是连续变量
qplot(mtcars$cyl)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

这里写图片描述

#将cyl转化为因子型变量
qplot(factor(mtcars$cyl))

这里写图片描述
如果参数向量包含在同一个数据框内,则可以运行下面的语句:

#变量值条形图,只利用BOD数据框中的Time列
#和demand列分别作为x和y参数
#qplot(Time,demand,data=BOD,geom="bar",stat="identity")
#这与下面的语句等价
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(mtcars$mpg,breaks=10)

这里写图片描述
注意:由于组距变小,每组对应的样本数有所减少

对于ggplot2包,可以使用qplot()函数得到同样的绘图结果

qplot(mtcars$mpg)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

这里写图片描述
如果参数向量在同一个数据框内,则可以使用下面的语句:

library(ggplot2)
qplot(mpg,data=mtcars,binwidth=4)

这里写图片描述

#这等价于
ggplot(mtcars,aes(x=mpg))+geom_histogram(binwidth = 4)

这里写图片描述

2.5绘制箱线图

使用plot()函数绘制箱线图时向其传递两个向量:x和y。当x为因子型变量(与数值型变量对应)时,它会默认绘制箱线图:

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

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")

这里写图片描述
对于ggplot2,可以使用qplot()函数绘制得到同样的结果。使用时需设定stat=”function”和geom=”line”,并向其传递一个输入和输出皆为数值型向量的函数:

library(ggplot2)
#将x轴的取值范围设定为0到20
#qplot(c(0,20),fun=myfun,stat="function",geom="line")
#Error: Unknown parameters: fun
#In addition: Warning message:
#  `stat` is deprecated
#这等价于
ggplot(data.frame(x=c(0,20)),aes(x=x))+stat_function(fun=myfun,geom="line")

这里写图片描述

本系列笔记所涉及的知识、数据等信息的版权归原书作者所有,请购买正版图书。O(∩_∩)O谢谢~
参考资料:R数据可视化手册

发表评论

0个评论

我要留言×

技术领域:

我要留言×

留言成功,我们将在审核后加至投票列表中!

提示x

知识工程知识库已成功保存至我的图谱现在你可以用它来管理自己的知识内容了

删除图谱提示×

你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?

删除节点提示×

无法删除该知识节点,因该节点下仍保存有相关知识内容!

删除节点提示×

你确定要删除该知识节点吗?