第3章 图形初阶(通用方法)

图形的创建与保存

图形的优势:有助于从庞杂的数据中洞察潜在的关系和本质,提取出不易发现的模式。
R允许在交互式会话中逐条输入语句构建图形、逐步完善图形特征。

attach(mtcars) #绑定R固有的数据框
plot(wt,mpg) #打开一个图形窗口并生成车身重量(x)与每加仑汽油行驶公里数的散点图
abline(lm(mpg~wt)) # 向图形添加一条最优拟合曲线
title("regression of mpg on weight")#为图形添加标题
detach(mtcars) #解绑

保存图形方法

  • 代码:将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。
pdf("mygraph.pdf") #开启

attach(mtcars) #绑定R固有的数据框
plot(wt,mpg) #打开一个图形窗口并生成车身重量(x)与每加仑汽油行驶公里数的散点图
abline(lm(mpg~wt)) # 向图形添加一条最优拟合曲线
title("regression of mpg on weight")#为图形添加标题
detach(mtcars) #解绑

dev.off() #关闭

图形也可以保存为其他格式,使用不同函数,如:win.metafile()、png(),jpeg().bmp(),tiff() ,xfig() ,postscript()

  • 图形用户界面:“文件”→“另存为”
    创建多幅图而避免覆盖:执行plot(),hist(),boxplot()这样的高级绘图命令会在创建一幅新图形时覆盖之前的图形。
 dev.new() #创建前打开一个新的图形窗口
 statements to create graph1
 dev.new()
 statements to create graph2

也可以在图形用户界面查看多个图形:历史(history)→记录(recording),“上一个”(previous)→“下一个(next)”

自定义图形参数

R允许对图形的高度定制,自主定义图形的各种参数,来调整图形的外观
示例数据

dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
#绘制描述药物A剂量与响应关系的图形
plot(dose,drugA,type="b")
# plot(x,y,type="b")将x置于横轴,y置于纵轴,绘制点集(x,y),使用线段(即type="b",同时绘制点和线)
#help(plot)可以查看plot相关选项

修改图形参数的方法:
①函数par()指定相应选项。调用格式:par(optionname=value,optionname=name,……)
不加参数执行par()会生成一个含有当前图形参数设置的列表;添加参数no.readonly=TRUE会生成一个可以修改的当前图形参数列表。

opar<-par(no.readonly=TRUE) #存储初始设置,opar即original par
par(lty=2,pch=17) #也可分开写
par(opar) # 恢复初始设置

②为高级绘图函数直接提供optionname=value的键值对,指定的选项将会仅对这幅图形本身有效

plot(dose,drugA,type="b",lty=2,pch=17)
#?plot或者?hist、?boxplot可以查看对于特定绘图函数可以直接指定图形参数的范围

符号&线条

符号线条参数列表

  • 选项pch=
    pch参数对应的图形符号-点的形状
    其中符号21-25,还可以指定边界颜色(col=)和填充色(bg=)
  • 选项lty=:指定想要的线条类型
    线条类型对应的编号
plot(dose,drugA,type="b",lty=3,lwd=3,pch=15,cex=2)

颜色

颜色参数
R中指定颜色的方法多种:颜色下标、颜色名称、十六进制颜色值、RGB值或HSV值
如白色:

col=1
col="white"
col="#FFFFFF"
col=rgb(1,1,1) #基于红-绿-蓝三色值生成颜色
col=hsv(0,0,1)#基于色相-饱和度-亮度值生成颜色
colors() #返回所有可用颜色的名称
> rainbow(10) #生成10种连续的彩虹色
 [1] "#FF0000" "#FF9900" "#CCFF00"
 [4] "#33FF00" "#00FF66" "#00FFFF"
 [7] "#0066FF" "#3300FF" "#CC00FF"
[10] "#FF0099"
> gray(0:10/10) #生成10阶灰度色
 [1] "#000000" "#1A1A1A" "#333333"
 [4] "#4D4D4D" "#666666" "#808080"
 [7] "#999999" "#B3B3B3" "#CCCCCC"
[10] "#E6E6E6" "#FFFFFF"
> n <- 10
> mycolors <- rainbow(n)
> pie(rep(1,n),labels = mycolors,col=mycolors)
> mygray <- gray(0:n/n)
> pie(rep(1,n),labels=mygray,col=mygray)

R中有多种创建连续型颜色向量的函数:rainbow(), heat.colors(),terrain.colors(), topo.colors(), cm.colors()

文本属性

指定文本大小的参数
文本大小1
文本大小2

指定字体族和字样的参数
字体族
在Windows中可以通过函数windowsFont()(这个函数仅在Windows上有效)创建有关字体族的新映射

windowsFonts(
A=windowsFont("Arial Black"),
B=windowsFont("Bookman Old Style"),
C=windowsFont("Comic Sans MS")
)

names(pdfFonts()):输出系统中的可用字体
生成图形:pdf(file=“myplot.pdf”,family=“fontname”)

par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)

图形尺寸和边界尺寸

尺寸

par(pin=c(4,3),mai=c(1,.5,1,.2))
#生成一幅4*3(英寸)的图形,上下边界均为1英寸,左右边界分别为0.5英寸和0.2英寸。

#标注文本和标题
一些高级绘图函数支持自行设定坐标轴和文本标注选项。
参数:
标题 main
副标题 sub
坐标轴标签 xlab ylab
坐标轴范围xlim、ylim

plot(dose,drugA,type="b",
col="red",lty=2,pch=2,lwd=2,
main="clinical trials for drugA",
sub="this is hypothetical data",
xlab="dosage",ylab="drug response",
xlim=c(0,60),ylim=c(0,70))

部分高级绘图函数包含默认的标题和标签,可以在plot()语句或单独的par()语句中添加参数ann=FALSE移除。

标题

函数title():添加标题和坐标轴标签,指定如文本大小 字体 旋转角度 颜色等参数

title(main="main title",col.main="red",
sub="sub-title",col.sub="blue",
xlab="x-axis label",ylab="y-axis label",
col.lab="green",cex.lab=0.75)

坐标轴

函数axis():创建自定义坐标轴
axis(side,at=,labels=,pos=,lty=,col=,las=,tck=,…)

坐标轴参数对应含义
【注意】高级绘图函数会自动生成坐标轴,如果要自定义,应当设置参数axes=FALSE,来禁用全部坐标轴(以及坐标轴框架线,除非设置frame.plot=TRUE)

函数lines():可以为一幅现有图形添加新的图形元素
函数mtext():可以在图形的边界添加文本

#综合示例
x<-c(1:10)
y<-x
z<-10/x
opar<-par(no.readonly=TRUE) #保存现有参数设置
par(mar=c(5,4,4,8)+0.1) #扩大边界
plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE)
#添加x-z图线
lines(x,z,type="b",pch=22,col="blue",lty=2)
#自主绘制坐标轴
axis(2,at=x,labels=x,col.axis="red",las=2)
axis(4,at=z,labels=round(z,digits=2),col.axis="blue",las=2,cex.axis=0.7,tck=-.01)
mtext("y=1/x",side=4,line=3,cex.lab=1,las=2,col="blue")
title("an example of creative axes",xlab="x values",ylab="Y-X")
par(opar) #恢复参数初始设置

运行结果图
次要刻度线:使用Hmisc包中的minor.tick()函数

library(Hmisc)
minor.tick(nx=n,ny=n,tick,ratio=n)
#nx/ny:x轴/y轴每两条刻度线之间通过次要刻度线划分得到的区间个数
#tick.ratio:次要刻度线相对于主刻度线的大小比例

参考线

函数abline():为图形添加参考线

abline(h=yvalues,v=xvalues)
abline(h=c(1,5,7)) #在y为1,5,7的位置添加水平实线
abline(v=seq(1,10,2),lty=2,col="blue")

图例

使用情境:图形中包含的数据不止一组,图例可以标注每个图形属于哪一类数据。
函数legend(): legend(location,title,legend,…)
图例选项
其它选项:包括指定盒子样式的bty,指定背景色的bg,指定大小cex,指定文本颜色text.col,指定horiz=TRUE则水平放置图例。(使用help(legend)可以查看)

dose <- c(20,30,40,45,60)
 drugA <- c(16,20,27,40,60)
 drugB <- c(15,18,25,31,40)
 opar <- par(no.readonly = TRUE)
 par(lwd=2,cex=1.5,font.lab=2)
 plot(dose,drugA,type="b", pch=15,lty=1,col="red",ylim=c(0,60),main="drugA vs. drugB",xlab="drug dosage",ylab="drug response")
 lines(dose,drugB,type="b",pch=17,lty=2,col="blue")
 abline(h=c(30),lwd=1.5,lty=2,col="gray")
 library(Hmisc)
 minor.tick(nx=3,ny=3,tick.ratio = 0.5)
 legend("topleft",inset=0.02,title="drug type",c("A","B"),cex=0.5,lty = c(1,2),pch=c(15,17),col=c("red","blue"))
par(opar)

【结果】

结果图

文本标注

一般文本

用途:向图形本身添加文本
函数text():可向绘图区域内部添加文本
格式 text(location,“text to place”, pos,…)
函数mtext():可向图形的四个边界之一添加文本
格式 mtext(“text to place”,side,line=n,…)
常用选项
其他选项:cex(字号),col(颜色),font(字体样式)

#示例:文本标注
attach(mtcars)
plot(wt,mpg,main="mileage vs. car weight",xlab="weight",ylab="mileage",pch=18,col="blue")
text(wt,mpg,row.names(mtcars),cex=0.6,pos=4,col="red") #在每个数据点右侧(pos=4)添加车辆型号,标签大小缩小为默认字号的0.6
detach(mtcars)

添加文本的结果图

#示例:不同字体族
opar<-par(no.readonly=TRUE)
par(cex=1.5) #字号放大为默认大小的1.5倍以便于辨认
plot(1:7,1:7,type="n")
text(3,3,"example of default text")
#family=参数选项用于指定字体族
text(4,4,family="mono","example of mono-spaced text")
text(5,5,family="serif","example of serif text")
par(opar)

字体族设置结果图

数学符号表注

demo(plotmath)
函数plotmath():可以为图形主体或边界上的标题、坐标轴名称或文本标注添加数学符号。

图形组合

用途:将多幅图形组合为一幅图形,以便于同时比较、更好洞察数据本质。
函数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)

运行结果
注:高级绘图函数hist()包含一个默认标题,可以使用main=" "或ann=FALSE来禁用。

#示例2
attach(mtcars)
opar<-par(no.readonly=TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)#恢复默认参数
detach(mtcars)

结果图

函数layout():layout(mat),控制最终图形中的子图数量位置和相对大小。
mat是一个矩阵,指定了所要组合的多个图形的所在位置

#示例
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE)) 
#解释:2*2矩阵,按行排列,第一个位置和第二个位置均为第一个图形,第三个位置放第二个图形,第四个位置放第三个图形
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

结果图
控制每幅图的大小:在函数layout()中使用widths=和heights=这两个参数
widths=各列宽度值组成的一个向量
heights=各行高度值组成的一个向量
相对宽度:直接通过数值指定
绝对宽度(厘米为单位):通过函数lcm()指定

#示例
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))
#解释:widths=c(3,1)表示第一幅:第二幅宽度=3:1,即1/4width:3/4width(图形窗口宽度);height同理
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)

终极武器:help(layout)

图形布局的精细控制

用途:不单单是组合图形,而是要精细控制图形布局,排布或叠加若干图形来创建单幅有意义的图形
图形函数fig()

#示例:在散点图上添加两幅箱线图,创建单幅增强型图形
opar<-par(no.readonly=TRUE)
par(fig=c(0,0.8,0,0.8)) #散点图 fig=参数选项(x1,x2,y1,y2)标出绘图区域,与matlab类似
plot(mtcars$wt,mtcars$mpg,xlab="miles per gallon",ylab="car weight")
par(fig=c(0,0.8,0.55,1),new=TRUE) #上方箱线图,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)

结果图
【注意】fig=默认会新建一幅图形,故若要添加一幅图到一幅现有图形上,请设定参数new=TRUE
需要不断尝试找到合适的位置参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值