楼主: 林随机漫步
2293 15

[图行天下] R语言交流群,小白静等大师指导! [推广有奖]

  • 1关注
  • 3粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
154 个
通用积分
102.8396
学术水平
11 点
热心指数
11 点
信用等级
11 点
经验
1957 点
帖子
67
精华
0
在线时间
135 小时
注册时间
2014-1-11
最后登录
2024-1-6

楼主
林随机漫步 发表于 2019-6-14 20:40:00 来自手机 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
欢迎来交流加微信huyanggs  备注  经管
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
林随机漫步 发表于 2019-6-16 22:09:16 来自手机 |只看作者 |坛友微信交流群
林随机漫步 发表于 2019-6-14 20:40
欢迎来交流加微信huyanggs  备注  经管
欢迎加入

使用道具

藤椅
林随机漫步 发表于 2019-6-18 22:07:23 来自手机 |只看作者 |坛友微信交流群
林随机漫步 发表于 2019-6-14 20:40
欢迎来交流加微信huyanggs  备注  经管
慢慢壮大的数据分析社群

使用道具

板凳
林随机漫步 发表于 2019-6-22 23:06:16 来自手机 |只看作者 |坛友微信交流群
林随机漫步 发表于 2019-6-14 20:40
欢迎来交流加微信huyanggs  备注  经管
好安静

使用道具

报纸
林随机漫步 发表于 2019-6-25 08:25:29 来自手机 |只看作者 |坛友微信交流群
林随机漫步 发表于 2019-6-14 20:40
欢迎来交流加微信huyanggs  备注  经管
顶一下

使用道具

地板
林随机漫步 发表于 2019-6-28 09:01:39 |只看作者 |坛友微信交流群
1 Lattice绘图系统
特点:一次成图;适用于关系变量间的交互:在变量z的不同水平,变量y如何随变量x变化。常见lattice包函数有xyplot、barplot、histogram等,格式 xyplot(y~x | f *g ,data);panel函数,用于控制每个面板内的绘图。
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)

使用道具

7
林随机漫步 发表于 2019-7-1 09:26:47 |只看作者 |坛友微信交流群
R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲

原创: 拴小林  数据驱动实践  4天前


数据可视化是数据分析过程中探索性分析的一部分内容,可以直观展示数据集数据所具有的的特征和关联关系等。R语言不仅提供了基本的可视化系统graphics包,简单的图+修饰,例如:plot、 hist(条形图)、 boxplot(箱图)、 points 、 lines、 text、title 、axis(坐标轴)等;还提供了更加高级的图形系统lattice和ggplot2.

base基本图形系统相关内容可参照:《R语言 图形初阶:hist、plot和图形布局layout | 第6讲》,作为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示例

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,每个区间内观测数相等
myx<- equal.count(x, number = #, overlap = proportion)
分组变量:将每个条件变量产生的图形叠加到一起,在同一幅图中展示,只需要将条件变量放到绘图函数中的group声明中即可。
> require(stats)## Tonga Trench Earthquakes
> library(lattice)
> Depth <- equal.count(quakes$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) # 加线,v是水平线,h是竖直线,线类型为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 <- data.frame(matrix(1:100,ncol=1))
> set.seed(100)
> y1 <- rnorm(100,1,20)  #rnorm(n, mean=0, sd=1) 正态分布
> set.seed(100)
> y2 <- rnorm(100,2,20)
> graph1 <- xyplot(y1~x)
> graph2 <- xyplot(y2~x)
> plot(graph1, split = c(1,1,1,2)) #打印graph1
> plot(graph2, split = c(1,2,1,2), newpage = FALSE) #在相同画布上打印graph2

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使用的案例呈现。

【推荐书籍】

R语言实战 第2版 作者:[美]卡巴科弗(Robert I. Kabacoff)
ggplot2:数据分析与图形艺术(第2版)作者:[美]哈德利·威克姆 著 黄俊文 王小宁 于嘉傲 冯璟烁 译


使用道具

8
林随机漫步 发表于 2019-7-3 15:10:03 |只看作者 |坛友微信交流群
R语言 图形初阶:hist、plot和图形布局layout | 第6讲

原创: 拴小林  数据驱动实践  1周前


图形是一个有效传递分析结果的呈现方式。R是一个非常优秀的图形构建平台,它可以在生成基本图形后,调整包括标题、坐标轴、标签、颜色、线条、符号和文本标注等在内的所有图形特征。本章将带大家领略一下R在图形构建中的强大之处,也为后续更为高阶图形构建铺垫基础。

目 录
1 认识常见的图形函数hist和plot
1.1 认识hist
1.2 认识plot
2 图形参数
符号和线条
颜色
文本属性
图形尺寸和边界尺寸
3 文本标注、自定义坐标轴和图例
3.1 标题
3.2 点标注
3.3 参考线
3.4 图例
4 图形布局与组合


正 文
1 认识常见的图形函数hist和plot

1.1 认识hist
hist(柱形图)是呈现一维数据的一种常用图形。
#hist函数表达式
hist(x, breaks = "Sturges",
     freq = NULL, probability = !freq,
     include.lowest = TRUE, right = TRUE,
     density = NULL, angle = 45, col = NULL, border = NULL,
     main = paste("Histogram of" , xname),
     xlim = range(breaks), ylim = NULL,
     xlab = xname, ylab,
     axes = TRUE, plot = TRUE, labels = FALSE,
     nclass = NULL, warn.unused = TRUE, ...)
主要参数解释:
x:定义数据向量
breaks:定义柱形图分组。可以是一个常数,定义分组个数,例如:breaks = 12;
        可以是一个有序数据集,定义分组的边界,其中两端边界即为x的最大最小值,例如:breaks = c(4*0:5, 10*3:5, 70, 100, 140
freq:定义频数/频率计算,默认freq=TRUE,频数;freq=FALSE,频率。
main:定义图标题
xlim/ylim:定义x/y横纵坐标范围
xlab/ylab:定义x/y横纵坐标名称
hist示例
set.seed(4)
x <- rchisq(100, df = 6)
hist(x)

hist(x,breaks = 20,freq = FALSE)


1.2 认识plot
plot(散点图)是最常见的展现双变量的图形。
#plot函数表达式
plot(x, y, ...) #常规形式定义数据
plot(y~x, ...) #函数形式定义数据
plot示例
> require(stats)
> head(cars,3)
  speed dist
1     4    2
2     4   10
3     7    4
> plot(cars)

> require(stats)
> head(cars,3)
  speed dist
1     4    2
2     4   10
3     7    4
> plot(cars)
> plot(cars$dist~cars$speed)


2 图形参数

主要包括以下图形参数
符号和线条:pch(点形状)、cex(点大小)、lty(线形状)、lwd(线宽度)
颜色:col(线/点颜色)……
文本属性:字体的缩放比例或加粗cex、font
图形尺寸和边界尺寸:pin(英寸表示图形尺寸)、mai(以数值向量表示边界大小,顺序(下、左、上、右),单位:英寸)、mar(以数值向量表示边界大小,顺序(下、左、上、右),单位:英分)
> require(stats)
> plot(cars$speed,cars$dist,type='b',lty=3,lwd=3,pch=15,cex=2)




type:呈现形式
"p" for points,
"l" for lines,
"b" for both,
"c" for the lines part alone of "b",
"o" for both ‘overplotted’,
"h" for ‘histogram’ like (or ‘high-density’) vertical lines,
"s" for stair steps,
"S" for other steps, see ‘Details’ below,
"n" for no plotting.






3 文本标注、自定义坐标轴和图例

3.1标题
plot(wt,mpg) #输出下左图
title(main="xxxxx") #在plot(wt,mpg)图上添加标题

3.2 点标注
attach(mtcars)
plot(wt,mpg,main = 'Mileage vs. Car Weight') #输出下图1
text(wt,mpg,row.names(mtcars),cex = 0.6,pos=4,col='red') #输出下图2
detach(mtcars)


attach(mtcars)
plot(wt,mpg,main = 'Mileage vs. Car Weight')
text(wt,mpg,mpg,cex = 0.6,pos=4,col='red') #输出下图3
detach(mtcars)

(图1)

(图2)

(图3)

3.3 参考线
函数abline()可以用来添加参考线,格式如下:
abline(h=yvalues,v=xvalues)
示例
attach(mtcars)
plot(wt,mpg,main = 'Mileage vs. Car Weight')
abline(h=c(min(mpg),mean(mpg),max(mpg)))
detach(mtcars)

attach(mtcars)
plot(wt,mpg,main = 'Mileage vs. Car Weight abline(lm(mpg~wt))')
abline(lm(mpg~wt))
detach(mtcars)



3.4 图例
图例格式如下:
legend(location,title,legend……)
#location位置
#title图例标题
#legend图例标签组成(可以使字符串向量)
图例示例
#2-4行原始数据
dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <- c(15,18,25,31,40)

#7-11行作图
plot(dose,drugA,type='b',col='red',lty=2,pch=2,lwd=2,
     main = 'Clinical Trials for Drug A',
     sub = 'This is hypothetical data',
     xlab = 'Dosage',ylab = 'Drug Response',
     xlim = c(0,60),ylim = c(0,70))
     
#14行添加线条
lines(dose,drugB,type='b',pch=17,lty=2,col='blue')

#17行添加辅助线
abline(h=c(30),lwd=1.5,lty=2,col='grey')

#20行添加图例
legend('topleft',inset = .05,title = 'drug type',c('A','B'),lty = c(1,2),pch = c(15,17),col=c('red','blue'))




4 图形布局与组合

在R中使用函数par()或layout()可以容易地组合多幅图形为一幅总括图形。par()函数中使用图形参数mfrow=c(nrows, ncols)来创建按行填充的、行数为nrows、列数为ncols的图形矩阵。另外,可以使用nfcol=c(nrows, ncols)按列填充矩阵。

布局与组合示例1:
attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow = c(2, 2))
plot(wt, mpg, main = "Scatterplot of wt vs. mpg")
plot(wt, disp, main = "Scatterplot of wt vs disp")
hist(wt, main = "Histogram of wt")
boxplot(wt, main = "Boxplot of wt")
par(opar)
detach(mtcars)


布局与组合示例2:
opar <- par(no.readonly = TRUE)
par(fig = c(0, 0.8, 0, 0.8))
plot(mtcars$wt, mtcars$mpg, xlab = "Miles Per Gallon",
ylab = "Car Weight")
par(fig = c(0, 0.8, 0.55, 1), new = TRUE)
boxplot(mtcars$wt, horizontal = TRUE, axes = FALSE)
par(fig = c(0.65, 1, 0, 0.8), new = TRUE)
boxplot(mtcars$mpg, axes = FALSE)
mtext("Enhanced Scatterplot", side = 3, outer = TRUE,
line = -3)
par(opar)

使用道具

9
林随机漫步 发表于 2019-7-5 07:42:32 |只看作者 |坛友微信交流群
R语言 高阶可视化绘图系统:ggplot2入门 | 第8讲
原创: 拴小林  数据驱动实践  前天
ggplot2是《The Grammar of Graphics》/《图形的语法》中提出了一套图形语法,将图形元素抽象成可以自由组合的要素,类似Photoshop中的图层累加,ggplot2将指定的元素/映射关系逐层叠加,最终形成所图形。更加深入学习ggplot2,请参考《ggplot2: 数据分析与图形艺术》。



目 录

引言:ggplot2基本要素

1. 数据(Data)和映射(Mapping)

2、几何对象(Geometric)

3、标度(Scale):fill、color、shape

4、统计变换(Stat)

5、坐标系统(Coordinante)

6、分面(Facet)

7、主题(Theme)

8、实例:0-1分色

附:ggplot2函数速查表



引言:ggplot2基本要素

“+”和“%+%”

数据(data)和映射(mapping):想要可视化的数据(data)以及一系列将数据中的变量对应到图形属性的映射(mapping);ggplot2的数据(data)必须是一个数据框(dataframe)。

几何对象(geometric):几何对象(geom)代表你在图中实际看到的元素,如点、线、多边形等。

统计变换(statistics):统计变换(stat)是对数据进行的某种汇总。例如将数据分组计数以创建直方图,或将一个二维的关系用线性模型进行解释。统计变换是可选的,但通常非常有用。

标度(Scale):标度(scale)的作用是将数据的取值映射到图形空间,例如用颜色、大小或形状来表示不同的取值。展现标度的常见做法是绘制图例和坐标轴——它们实际上是从图形到数据的一个映射,使你可以从图形中读取原始的数据。标度包括位置、颜色、大小、形状、线型。

坐标系统(Coordinate):坐标系(coord)描述了数据是如何映射到图形所在的平面的,它同时提供了看图所需的坐标轴和网格线。我们通常使用的是笛卡尔坐标系,但也可以将其变换为其它类型,如极坐标和地图投影。

图层(Layer):图层的作用是生成在图像上可以被人感知的图形。一个图层由4部分组成:数据和图形属性映射;一种统计变换;一种几何对象;一种位置调整方式。

分面(Facet):分面(facet)描述了如何将数据分解为各个子集,以及如何对子集作图并联合进行展示。分面也叫作条件作图或网格作图。



其中各要素通过“+”以图层(layer)的方式来粘合构图(可以简单理解为要素/图层叠加符号);另外在ggplot2中,数据集必须为数据框(data.frame)格式,并且可以通过%+%符号调整已有数据集(ggplot2指导文档中明确写出“To override the data, you must use %+%”,也就是覆盖数据必须通过%+%)。以mpg数据集为例。

library(ggplot2)

#绘制基本ggplot图
base <- ggplot(mpg, aes(displ, hwy)) + geom_point()
p1 <- base + geom_smooth() + labs(title="图1") #如图1

#用%+%调整映射关系中的数据
base <- ggplot(mpg, aes(displ, hwy)) + geom_point()
# To override the data, you must use %+%
#也即覆盖原始数据必须通过%+%
p2 <- base %+% subset(mpg, fl == "p") + labs(title="图2") #图2

#第二种调整数据的方法list
# Alternatively, you can add multiple components with a list.
# This can be useful to return from a function.
p3 <- base + list(subset(mpg, fl == "p"), geom_smooth(), labs(title="图3")) #图3

###########一页多图########
library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p1, vp = vplayout(1,1))   #(1,1)的位置画图1
print(p2, vp = vplayout(1,2))   #(1,2)的位置画图2
print(p3, vp = vplayout(2,1))  #(2,1)的位置画图3








1. 数据(Data)和映射(Mapping)
前文已经提及在ggplot2中,数据集必须为数据框(data.frame)格式,并且可以通过%+%符号调整已有数据集。

映射是将一个变量中离散或连续的数据与一个图形属性中以不同的参数来相互关联, 而设定能够将这个变量中所有的数据统一为一个图形属性。aes()函数是ggplot2中的映射函数, 所谓的映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系(注意第10行)。可以发现, 在p2中, 通过aes()指定了横纵坐标分别为wt和hp

> p1 <- ggplot(data = mtcars)
> summary(p1)
data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
faceting: <ggproto object: Class FacetNull, Facet, gg>
    …… #此部分省略一些内容

> p2 <- ggplot(data = mtcars, mapping = aes(x = wt, y = hp))
> summary(p2)
data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
mapping:  x = ~wt, y = ~hp
faceting: <ggproto object: Class FacetNull, Facet, gg>
   …… #此部分省略一些内容


另外,在ggplot2中,ggplot()函数声明了全局数据和映射关系,在后续几何对象中如未重新设定数据和映射关系,几何对象将沿用ggplot()中声明的数据与映射关系;

当然几何对象可重新设定数据与映射关系,并作用于此几何对象(对比图4和图7),但并不对初始图图层产生影响(对比图4和图6,图6虽对几何图形中重新定义y变量为carb,但纵坐标依然是wt)。



#library(ggolot2)
p <- ggplot(mtcars, aes(x = mpg, y = wt))#设定默认的映射关系

p4 <- p + geom_point() + labs(title="图4")
#图4沿用默认的映射关系来绘制散点图

p5 <- p + geom_point(aes(shape = factor(carb))) + labs(title="图5")
#图5添加图层中的shape的映射关系

p6 <- p + geom_point(aes(y = carb)) + labs(title="图6")
#图6修改默认的y的映射关系, 注意图中y轴名称仍然以默认的wt表示

df <- mtcars[which(mtcars$am==1),]
p7 <- p + geom_point(data = df,aes(x = mpg, y = wt)) + labs(title="图7")
#重新定义point几何对象中的数据与映射关系

###########一页多图########
#library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p4, vp = vplayout(1,1))   #(1,1)的位置画图4
print(p5, vp = vplayout(1,2))   #(1,2)的位置画图5
print(p6, vp = vplayout(2,1))  #(2,1)的位置画图6
print(p7, vp = vplayout(2,2))  #(2,2)的位置画图7







2、几何对象(Geometric)
上述例子中,数据映射关系有ggplot()函数设定,使用geom_point()添加一个几何图层,告诉ggplot绘画点图,并将图层属性映射到散点上。

geom_point之外,ggplot2提供了多种几何对象映射,如geom_histogram直方图,geom_bar画柱状图,geom_boxplot画箱式图等等。不同的几何对象,要求的属性会有些不同,这些属性也可以在几何对象映射时提供。

> library(ggplot2)
> ls("package:ggplot2", pattern="^geom_.+")
[1] "geom_abline"     "geom_area"       "geom_bar"        "geom_bin2d"      "geom_blank"     
[6] "geom_boxplot"    "geom_col"        "geom_contour"    "geom_count"      "geom_crossbar"  
[11] "geom_curve"      "geom_density"    "geom_density_2d" "geom_density2d"  "geom_dotplot"   
[16] "geom_errorbar"   "geom_errorbarh"  "geom_freqpoly"   "geom_hex"        "geom_histogram"
[21] "geom_hline"      "geom_jitter"     "geom_label"      "geom_line"       "geom_linerange"
[26] "geom_map"        "geom_path"       "geom_point"      "geom_pointrange" "geom_polygon"   
[31] "geom_qq"         "geom_qq_line"    "geom_quantile"   "geom_raster"     "geom_rect"      
[36] "geom_ribbon"     "geom_rug"        "geom_segment"    "geom_sf"         "geom_sf_label"  
[41] "geom_sf_text"    "geom_smooth"     "geom_spoke"      "geom_step"       "geom_text"      
[46] "geom_tile"       "geom_violin"     "geom_vline"   
#library(ggplot2)
p <- ggplot(mtcars, aes(x = mpg, y = wt))
p8 <- p + geom_point() + labs(title="图8") #图8散点图

p <- ggplot(mtcars, aes(x = factor(carb), y = wt))
p9 <- p + geom_bar(stat= 'identity') + labs(title="图9") #图9条形图

###########一页多图########
#library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(1,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p8, vp = vplayout(1,1))   #(1,1)的位置画图8
print(p9, vp = vplayout(1,2))   #(1,2)的位置画图9




3、标度(Scale):fill、color、shape

在对图形属性进行映射之后,使用标度可以控制这些属性的显示方式,比如颜色属性、形状属性等。

对比图10和图11,aes中color参数属性可以发现,如color对应变量为factor因子时,图10中图例分组显示不同颜色;但如factor对应的变量为数值,ggplot将其识别为连续变量,数值大小决定颜色深度;对比12和图13,不论是在ggplot函数中定义color还是在几何对象中定义color,其具有相同的效果。



#library(ggplot2)
p <- ggplot(mtcars, aes(x = mpg, y = wt))
p10 <- p + geom_point(aes(color=factor(gear))) + labs(title="图10") #图10
p11 <- p + geom_point(aes(color=gear)) + labs(title="图11") #图11

p <- ggplot(mtcars, aes(x = mpg, y = wt,color = factor(gear)))
p12 <- p + geom_point(aes(shape=factor(cyl))) + labs(title="图12") #图12

p <- ggplot(mtcars, aes(x = mpg, y = wt))
p13 <- p + geom_point(aes(color=factor(gear),shape=factor(cyl))) + labs(title="图13") #图13

###########一页多图########
#library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p10, vp = vplayout(1,1))   #(1,1)的位置画图10
print(p11, vp = vplayout(1,2))   #(1,2)的位置画图11
print(p12, vp = vplayout(2,1))  #(2,1)的位置画图12
print(p13, vp = vplayout(2,2))  #(2,2)的位置画图13




4、统计变换(Stat)

统计变换对原始数据进行某种计算,然后在图上显示出来,例如在散点图上加一条回归线。

ggplot(mtcars, aes(x = mpg, y = wt))+geom_point()+scale_y_log10()+stat_smooth(method = "auto", formula = y ~ x)




aes所提供的参数,就通过ggplot提供,而不是提供给geom_point,因为ggplot里的参数,相当于全局变量,geom_point()和stat_smooth()都知道x,y的映射,如果只提供给geom_point(),则相当于是局部变量。ggplot2提供了多种统计变换方式:

> library(ggplot2)
> ls("package:ggplot2",pattern="stat_.+")
[1] "stat_bin"             "stat_bin_2d"          "stat_bin_hex"         "stat_bin2d"           "stat_binhex"         
[6] "stat_boxplot"         "stat_contour"         "stat_count"           "stat_density"         "stat_density_2d"     
[11] "stat_density2d"       "stat_ecdf"            "stat_ellipse"         "stat_function"        "stat_identity"      
[16] "stat_qq"              "stat_qq_line"         "stat_quantile"        "stat_sf"              "stat_sf_coordinates"
[21] "stat_smooth"          "stat_spoke"           "stat_sum"             "stat_summary"         "stat_summary_2d"     
[26] "stat_summary_bin"     "stat_summary_hex"     "stat_summary2d"       "stat_unique"          "stat_ydensity"      
[31] "update_stat_defaults"


5、坐标系统(Coordinante)

坐标系统控制坐标轴进行变换,例如XY轴翻转,笛卡尔坐标和极坐标转换。

#设置基本映射关系
p <- ggplot(mtcars)
p14 <- p + geom_bar(aes(x = factor(carb)))+coord_flip() + labs(title="图14")  #图14原图

#坐标轴翻转由coord_flip()实现
p15 <- p + geom_bar(aes(x = factor(carb)))+coord_flip() + labs(title="图15")  #图15

#转换成极坐标可以由coord_polar()实现:风玫瑰图(windrose)
p16 <- p + geom_bar(aes(x = factor(1),fill=factor(gear))) + coord_polar() + labs(title="图16")  #图16

#转换成极坐标可以由coord_polar()实现:风玫瑰图(windrose)
p17 <- p + geom_bar(aes(x = factor(carb),fill=factor(gear))) + coord_polar() + labs(title="图17")  #图17

###########一页多图########
#library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p14, vp = vplayout(1,1))   #(1,1)的位置画图14
print(p15, vp = vplayout(1,2))   #(1,2)的位置画图15
print(p16, vp = vplayout(2,1))  #(2,1)的位置画图16
print(p17, vp = vplayout(2,2))  #(2,2)的位置画图17


6、分面(Facet)

分面可以让我们按照某种给定的条件,对数据进行分组,然后分别画图。

#facet_grid
mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) +  geom_point()
mt + facet_grid(. ~ cyl, scales = "free")




#facet_wrap
ggplot(mpg, aes(displ, hwy)) +  geom_point() +  facet_wrap(~class, scales = "free")




7、主题(Theme)

p1 <- ggplot(mtcars, aes(wt, mpg)) +  geom_point() +  labs(title = "Fuel economy declines as weight increases") + labs(title="图20")  #图20
p17 <- p1 + theme(plot.title = element_text(size = rel(2)))  + labs(title="图17")  #图17
p18 <- p1 + theme(plot.background = element_rect(fill = "green"))  + labs(title="图18")  #图18
p19 <- p1 + theme(panel.background = element_rect(fill = "white", colour = "grey50")) + labs(title="图19")  #图19

###########一页多图########
#library(grid)
grid.newpage()  ##新建页面
pushViewport(viewport(layout = grid.layout(2,2))) #将页面分成2*2矩阵
vplayout <- function(x,y){ viewport(layout.pos.row = x, layout.pos.col = y)}

print(p1, vp = vplayout(1,1))   #(1,1)的位置画图20
print(p17, vp = vplayout(1,2))   #(1,2)的位置画图17
print(p18, vp = vplayout(2,1))  #(2,1)的位置画图18
print(p19, vp = vplayout(2,2))  #(2,2)的位置画图19  






8 实例

set.seed(1)
x <- 1980 + 1:50
y <- round(100*rnorm(50))
df <- data.frame(x = x,y = y)
# 判断y是否为正值
df <- transform(df,judge = ifelse(y>0,"YES","NO"))
# 去除图例用theme()主题函数
ggplot(df,aes(x = x,y = y,fill = judge))+
geom_bar(stat = "identity")+
theme(legend.position= "")+
xlab("Year")+
scale_fill_manual(values = c("darkred","blue"))




【ggplot2函数速查表】

地址:https://ggplot2.tidyverse.org/







【推荐书籍】

ggplot2:数据分析与图形艺术(第2版)
作者:[美]哈德利·威克姆 著 黄俊文 王小宁 于嘉傲 冯璟烁 译

R语言实战 第2版
作者:[美]卡巴科弗(Robert I. Kabacoff)





使用道具

R语言 常见函数知识点梳理与解析 | 精选分析

原创: 拴小林  数据驱动实践  前天

目 录
1、str() 显示数据集和变量类型,并简要展示数据集情况
2、subset()  取子集
3、which.min(), which.max()和which()
4、pmin( )/ pmax( )
5、complete.cases( ) 判断对象中是否数据完全
6、grep()找出所数据框中元素所在的列值(仅数据框中)
7、assign()通过变量名的字符串来赋值
8、 split()根据因子变量拆分数据框/向量
9、unique()返回 x 但是省去重复的数值
10、round(),floor()和ceiling()
11、sign() 符号函数
12、%in% 检验x是否为集合y中的元素(x%in%y )
13、ls( )用来列出现存的所有对象

常见函数列表
14、数据管理相关
15、字符串处理函数
16、因子
17、数学计算
18、数组相关
19、逻辑运算
20、控制结构相关
21、自定义函数相关
22、输入输出
23、工作环境
24、简单统计量
25、时间序列

【往期回顾】
R语言 | 第一部分:数据预处理
R语言|第2讲:生成数据
R语言常用的数据输入与输出方法 | 第三讲
R语言数据管理与dplyr、tidyr | 第4讲
R语言 控制流:for、while、ifelse和自定义函数function|第5讲


正 文

1、str() 显示数据集和变量类型,并简要展示数据集情况
> data(mtcars)
> str(mtcars)
'data.frame':   32 obs. of  11 variables:
$ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
$ disp: num  160 160 108 258 360 ...
$ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
$ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num  16.5 17 18.6 19.4 17 ...
$ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
$ am  : num  1 1 1 0 0 0 0 0 0 0 ...
$ gear: num  4 4 4 3 3 3 3 4 4 4 ...
$ carb: num  4 4 1 1 2 1 4 2 2 4 ...

2、subset()  取子集
条件筛选后,mtcars_df数据集为20 obs.
> data(mtcars)
> str(mtcars)
'data.frame':   32 obs. of  11 variables:
#……省略部分内容
$ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
#……省略部分内容

> mtcars_df <- subset(mtcars,wt > 3)
> str(mtcars_df)
'data.frame':   20 obs. of  11 variables:
#……省略部分内容
$ wt  : num  3.21 3.44 3.46 3.57 3.19 ...
#……省略部分内容

3、which.min(), which.max()和which()
which(), which.max(), which.min()返回的是位置(索引)

which(x, arr.ind = FALSE, useNames = TRUE)
x是一个向量或者数组;arr.ind = FALSE 默认返回数组索引
> set.seed(1)
> x <- rnorm(10)
> x
[1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078 -0.8204684  0.4874291
[8]  0.7383247  0.5757814 -0.3053884
> which(x > 0) #显示x>0的所有数值
[1] 2 4 5 7 8 9
> which.min(x) #显示min(x)的所有数值的位置
[1] 3
> which.max(x) #显示max(x)的所有数值的位置
[1] 4
> plot(1:10,x) #如下图

> y <- data.frame(matrix(1:10,ncol = 2))
> which(y > 5) #显示x>5的所有数值
[1]  6  7  8  9 10
> which(y > 5,arr.ind = TRUE) #显示x>5的所有数值的位置
     row col
[1,]   1   2
[2,]   2   2
[3,]   3   2
[4,]   4   2
[5,]   5   2



4、pmin( )/ pmax( )
把多个等长度的向量按元素逐个对比,返回所有向量的第K个元素中最小(最大)值
> x <- c(1,2,3,4,5)
> y <- c(2,5,1,3,4)
>
> pmin(x,y)
[1] 1 2 1 3 4
> pmax(x,y)
[1] 2 5 3 4 5

5、complete.cases( ) 判断对象中是否数据完全
complete.case()可以判断对象中是否数据完全,然后返回TRUE, FALSE。这一函数在去除数据框中缺失值时很有用。
> x <- matrix(c(1,2,NA,4),nrow = 4)
> x
     [,1]
[1,]    1
[2,]    2
[3,]   NA
[4,]    4
> complete.cases(x)
[1]  TRUE  TRUE FALSE  TRUE
> x[complete.cases(x),]
[1] 1 2 4

6、grep()找出所数据框中元素所在的列值(仅数据框中)
> x <- data.frame(matrix(c(1,2,NA,4),nrow = 2))
> x
  X1 X2
1  1 NA
2  2  4
> grep(1,x)
[1] 1
> grep(2,x)
[1] 1
> grep(4,x)
[1] 2


7、assign()通过变量名的字符串来赋值
> assign("x",c(1:10))
> x
[1]  1  2  3  4  5  6  7  8  9 10


8、 split()根据因子变量拆分数据框/向量

split(x,f);x 可以为向量或者数据框,f 为对应的因子,函数以列表的形式返回
> x = data.frame(matrix(1:10,nrow = 5))
> MorFM = c("Female","Male","Female","Female","Female")
> split(x,MorFM)
$Female
  X1 X2
1  1  6
3  3  8
4  4  9
5  5 10

$Male
  X1 X2
2  2  7

> yx <- split(x,MorFM)
> yx$Female
  X1 X2
1  1  6
3  3  8
4  4  9
5  5 10
> yx$Male
  X1 X2
2  2  7

9、unique()返回 x 但是省去重复的数值
> x <- c(1:5,2:10,3,5)
> x
[1]  1  2  3  4  5  2  3  4  5  6  7  8  9 10  3  5
> unique(x)
[1]  1  2  3  4  5  6  7  8  9 10

10、round(),floor()和ceiling()
round()四舍五入取整;floor()向下取整;ceiling()向上取整
> round(3.5)
[1] 4
> floor(3.5)
[1] 3
> ceiling(3.5)
[1] 4

11、sign() 符号函数
sign()根据其参数向量中的数值是正值、零、负值将其分别转化为1,0,-1
> set.seed(1)
> x <- rnorm(20)
> x
[1] -0.62645381  0.18364332 -0.83562861  1.59528080  0.32950777 -0.82046838
[7]  0.48742905  0.73832471  0.57578135 -0.30538839  1.51178117  0.38984324
[13] -0.62124058 -2.21469989  1.12493092 -0.04493361 -0.01619026  0.94383621
[19]  0.82122120  0.59390132
> x_sign <- sign(x)
> x_sign
[1] -1  1 -1  1  1 -1  1  1  1 -1  1  1 -1 -1  1 -1 -1  1  1  1
> plot(x,x_sign)

12、%in% 检验x是否为集合y中的元素(x%in%y )

> y <- c(1,3,5)
> 5%in%y
[1] TRUE
> 4%in%y
[1] FALSE

13、ls( )用来列出现存的所有对象

pattern是一个具名参数,可以列出所有名称中含有字符串“s”的对象。

> library(ggplot2)
> ls("package:ggplot2", pattern="geom_.a")
[1] "geom_bar"    "geom_label"  "geom_map"    "geom_path"   "geom_raster"

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 22:46