数据可视化是数据分析过程中探索性分析的一部分内容,可以直观展示数据集数据所具有的的特征和关联关系等。R语言不仅提供了基本的可视化系统graphics包,简单的图+修饰,例如:plot、 hist(条形图)、 boxplot(箱图)、 points 、 lines、 text、title 、axis(坐标轴)等;还提供了更加高级的图形系统lattice和ggplot2.
base基本图形系统相关内容可参照:
《R语言 图形初阶:hist、plot和图形布局layout》
,作为R语言图形绘制的入门一节。后续将分别就lattice和ggplot2可视化绘图系统进行简要介绍。
目录
引言
1 Lattice绘图系统
1.1 lattice常见函数集表达式对照表
1.2 lattice绘图系统相关参数对照表
1.3 面板函数
1.4 图形参数
1.5 页面布局
2 ggplot2绘图系统
ggplot2初识
更多下期详解
引言
不同类型变量常用的图表
连续数值变量
-
一个数值变量可以用:柱状图,点图,箱图
-
两个数值变量可以用:散点图
分类变量
一个分类变量一个数值变量
:
1 Lattice绘图系统
特点:一次成图;适用于关系变量间的交互:在变量z的不同水平,变量y如何随变量x变化。常见lattice包函数有xyplot、barplot、histogram等,格式 xyplot(y~x | f *g ,data);panel函数,用于控制每个面板内的绘图。
xyplot示例1:
xyplot(y~x ,data)
> library(lattice)
> data(airquality)
> xyplot(Temp~Ozone,data=airquality)
xyplot示例2:
xyplot(y~x | f ,data)
xyplot(Temp~Ozone|factor(Month),data=airquality)
#在变量factor(Month)的不同水平,变量Temp如何随变量Ozone变化。
1.1 lattice常见函数集表达式对照表
图形类型
|
函数
|
表达式示例
|
三维等高线图
|
contourplot()
|
z ~ x*y
|
三维水平图
|
levelplot()
|
z ~ y*x
|
三维散点图
|
cloud()
|
z ~ x*y|A
|
三维线框图
|
wireframe()
|
z ~ y*x
|
条形图
|
barchart()
|
x ~ A或A ~ x
|
箱线图
|
bwplot()
|
x ~ A或A ~ x
|
点图
|
dotplot()
|
~ x | A
|
直方图
|
histogram()
|
~ x
|
核密度图
|
densityplot()
|
~ x | A*B
|
平行坐标图
|
parallel()
|
dataframe
|
散点图
|
xyplot()
|
y ~ x | A
|
散点图矩阵
|
splom()
|
dataframe
|
带状图
|
stripplot()
|
A ~ x或x ~ A
|
高级绘图中表达式的通常格式:y ~ x | A * B
竖线左边的变量称为主要变量,右边称为条件变量
。主要变量即为图形的两个坐标轴,其中y在纵轴上,x在横轴上。变形:单变量绘图,用 ~ x 即可;三维绘图,用z ~ x*y;多变量绘图,使用数据框代替y ~ x即可。
1.条件变量的用法
~ x | A表示因子A各个水平下数值型变量x的分布情况;y ~ x | A * B表示因子A和B各个水平组合下数值型变量x和y之间的关系。A ~ x表示A在纵轴上展示,x在横轴上展示。
条件变量为连续型变量时,要先将其转换成离散型变量。
一种方法是使用cut()函数,另外可以使用lattice包中的函数将连续型变量转化为瓦块(shingle)数据结构,这样,连续型变量可以被分割为一系列(可能)重叠的数值范围。这样就可以使用这个变量作为条件变量了
#连续型变量x将会被分割为#个区间,重叠度为proportion,每个区间内观测数相等
myxnumber =
分组变量:将每个条件变量产生的图形叠加到一起,在同一幅图中展示,只需要将条件变量放到绘图函数中的group声明中即可。
> require(stats)
> library(lattice)
> Depth $depth, number=8, overlap=.1)
> xyplot(lat ~ long | Depth, data = quakes)
1.2 lattice绘图系统相关参数对照表
参数名
|
参数解释
|
spect
|
数值,设定每个面板中图形的宽高比
|
col/pch/lty/lwd
|
向量,分别设定图形中的颜色、符号、线条类型和线宽
|
Groups
|
用来分组的变量(因子)
|
index.cond
|
列表,设定面板的展示顺序
|
key(或auto.key)
|
函数,添加分组变量的图例符号
|
layout
|
两元素数值型向量,设定面板的摆放方式(行数和列数);如有需要,可以添加第三个元素,以指定页数
|
Main/sub
|
字符型向量,设定主标题和副标题
|
Panel
|
函数,设定每个面板要生成的图形
|
Scales
|
列表,添加坐标轴标注信息
|
Strip
|
函数,设定面板条带区域
|
Split/position
|
数值型向量,在一页上绘制多幅图形
|
Type
|
字符型向量,设定一个或多个散点图的绘图参数,(如p=点,l=线,r=回归,smooth=平滑曲线,g=格点)
|
xlab/ylab
|
字符型向量,设定横轴和纵轴标签
|
xlim/ylim
|
两元素数值型向量,分别设定横轴和纵轴的最小和最大值
|
示例3:lattice绘图系统相关参数
xyplot(Sepal.Length ~ Petal.Length | Species,
data = iris, scales = "free", layout = c(2, 2),
auto.key = list(x = .6, y = .7, corner = c(0, 0)))
1.3 面板函数
自定义面板的各个选项,然后在绘制图形的函数中调用即可
示例4:panel面板函数设置
mypanel = function(x,y){
panel.abline(v=mean(x),h=mean(y), lty=2)
panel.lmline(x,y,col="red")
}
xyplot(Sepal.Length ~ Petal.Length | Species,
data = iris, ,panel=mypanel,scales = "free", layout = c(2, 2),
auto.key = list(x = .6, y = .7, corner = c(1, 0)))
1.4 图形参数
查看默认的图形参数使用trellis.par.get()函数;修改这些参数使用trellis.par.set()函数;show.settings()函数可以展示当前的图形参数设置情况。
1.5 页面布局
lattice无法使用par()函数,因此需要将图形存储到对象中,然后利用plot()函数中的split = 或position = 选项来进行控制
split的方法
,将第一幅图放置到第二幅图的上面:第一个plot()函数把页面分割为一列两行的矩阵,并将图形放置到第一列第一行中;第二个plot()函数将图形放置到第一列第二行中,由于plot()函数默认启动新的页面,因此使用newpage = FALSE选项。
> library(lattice)
> x
> set.seed(100)
> y1 #rnorm(n, mean=0, sd=1) 正态分布
> set.seed(100)
> y2
> graph1
> graph2
> plot(graph1, split = c(1,1,1,2))
> plot(graph2, split = c(1,2,1,2), newpage = FALSE)
position方法
,设定坐标,原点位于页面左下角,x轴和y轴维度范围为(0, 1),position = (xmin, ymin, xmax, ymax)。
> plot(graph1, position = c(0, .3, 1, 1))
> plot(graph2, position = c(0, 0, 1, .3), newpage = FALSE)
2 ggplot2绘图系统
ggplot2将数据、数据到图形要素的映射以及图形要素绘制分离,然后按图层叠加的方式作图,通过+进行叠加。
ggplot2基本要素
-
数据(Data)和映射(Mapping):
Data(数据) 感兴趣的变量(data frame)
-
几何对象(Geometric):
point / line / histogram / bar / boxplot
-
标尺(Scale):
标度是一种函数,它控制了数学空间到图形元素空间的射
-
统计变换(Statistics):
binning / smoothing / descriptive / inferential
-
坐标系统(Coordinante):
坐标系统控制了图形的坐标轴并影响所有图形元素
-
图层(Layer):将
包含有各种图形元素的图层叠放在一起,组合成最终效果
-
分面(Facet):
很多时候需要将数据按某种方法分组分别作图。Facet就是控制分组绘图的方法和排列形式。
-
主题(Theme)
ggplot2入门示例
> df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30)) #生成数据
> ggplot(df, aes(gp, y)) #建立映射关系,此情况下仅输出基本画布信息,并没有数据点/线
> df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30)) #生成数据
> ggplot(df, aes(gp, y)) + geom_point() #建立映射关系并添加点几何对象
#或
> df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30)) #生成数据
> p <- ggplot(df, aes(gp, y)) #建立映射关系,并赋值给p
> p + geom_point()#基于p添加点几何对象
由于ggplot2绘图系统内容繁杂,本文不再展开,本公众号将在下一节全面展开对ggplot2使用的案例呈现。