R语言的作图功能有多强大就不多做介绍了,可以自行百度;这里简单介绍下R作图的一些知识
先简单做个图吧
rm(list=ls())
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
#逐步添加图形要素
#plot(dose, drugA) #点图
plot(dose, drugA, type="b") #点连线
lines(dose, drugB, type="b") #再添加一条
title("relations between dose and drug")
要点1、修改图形参数
- 方法一
opar <- par(no.readonly=TRUE) # 保存原始默认参数
par(lty=2, pch=17) # 改变两个参数:lty为线条类型,pch为点符号类型
plot(dose, drugA, type="b") # 改变的基础上生成新图
#该参数修改直至运行下述代码或者重启R时恢复默认设置
par(opar) # 恢复初始设置
- 方法二
plot(dose, drugA, type="b", lty=3, lwd=3, pch=15, cex=2)
#直接修改,但并不是所有参数都支持
要点2、图形参数
(1)符号与线条
- pch 点符号(0~25)p48
- cex 点大小,数值表示倍数大小
- lty 线条类型(1~6)
- lwd 线条宽度,数值表示倍数大小
plot(dose, drugA, type="b", lty=3, lwd=3, pch=15, cex=2)
(2)颜色
- col 默认的绘图颜色(就是图形颜色,比如上面的符号与线条)
- col.axis 坐标轴刻度文字的颜色(一般就是那些数字)
- col.lab 坐标轴标题的颜色
- col.main 标题颜色
- col.sub 副标题颜色
- fg 图形前景色(轴和框的颜色)
- bg 图形背景色(刚试了下,没反应?)
#可以直接用基本颜色英文表示,也支持十六进制,RGB等等
col="red"
colors() #可返回所有可用颜色的名称,下面的网站可以查看具体所对应的颜色
# http://www.docin.com/p-1491680339.html
rainbow(3) #可以返回指定数目的“彩虹型”颜色
#[1] "#FF0000FF" "#00FF00FF" "#0000FFFF"
#R包RColorBrewer可以创建出吸引人的颜色配对
library(RColorBrewer)
mycolors <- brewer.pal(5, "Set1") #从Set1中抽取5中颜色
barplot(rep(1,10), col=mycolors) #循环重复
(3)文本属性
文本大小
- cex.axis 为数值,表倍数
- cex.lab
- cex.main
- cex.sub
字体样式
- font.axis 1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体
- font.lab
- font.main
- font.sub
(4)尺寸
- pin 以英寸表示的图形尺寸,宽和高
- mai 表图的四周的宽大小,顺序为下,左,上,右;单位为英寸
- mar 同上,单位为英分。1英分=1/12英寸=0.21厘米
要点3、添加元素
高级绘图函数可以自己添加
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)) #设置x,y轴的范围
(1)添加标题
#title()函数
title(main="主标题",sub="副标题",xlab="x轴标题",ylab="y轴标题")
#同时可以参考上述参数进行细节修改
(2)添加次要刻度线
library(Hmisc)
minor.tick(nx=2,ny=3,tick.ratio=0.5)
#意为在x轴的的每两条主刻度线间添加一条次要刻度线(分成2段)
# y添加两条,分成3段。大小为主刻度的0.5倍。
添加自定义坐标轴见P55
(3)添加参考线
abline(h=c(1,5,7)) #添加水平参考线
abline(v=c(2,5),lty=2,col="blue") #添加蓝色的垂直虚线
(4)添加示例图形
legend("topleft",inset=.05,
title = "Drug Type",
c("A","B"), lty = c(2,6),pch = c(19,23),col=c("red","blue"))
#前两个参数说明位置;其中inset = 指定图例想图形内侧移动的大小
#也可以用坐标表示,执行locator(1)命令,配合鼠标点击,返回位置信息
(5)添加文本标注
#这里以给点图添加文本标注为例
attach(mtcars)
plot(wt,mpg)
text(wt,mpg,rownames(mtcars),pos=4,cex=0.6)
#前两个参数提供位置参数,即点的位置信息;
#第三个为向量的形式提供文本内容,注意长度要相同;
#pos指明文本相对位置1234-下左上右
detach(mtcars)
小彩蛋1--演示数学标记方法
demo(plotmath)
help(plotmath)
小彩蛋2--多幅图显示在一起/拼图
#mfrow=c() 函数,默认 mfrow=c(1,1)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,3)) #按行填充,行数为2,列数为3的图形矩阵
par(mfcol=c(2,3)) #按列填充
#layout() 函数,可以设置“品”字形的图形矩阵
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths=c(3,1),heights=c(1,2))
par(opar)
#第一幅图被置于第一行,另两幅图被放在第二行。
#第一行图形高度是第二行的1/2,右下图宽度是左下宽度的1/3
小彩蛋3--设置坐标轴边上副图
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)
# new=TRUE 很关键的参数,表示在原有图上加图
hist(mtcars$wt,main = "",xlab = "",labels = TRUE,ylim=c(0, 10))
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)
dev.off()
- 如上代码,关键设置为例如
fig=c(0,0.8,0,0.7)
表示该图的位置,表示图形占据横向范围00.8,纵向范围00.7。具体设置值通过不断调试而得。
如上图有一点遗憾,就是不知道怎么把频率图的x轴刻度标签删去。
大部分代码参考《R语言实战(第二版)》;部分图片来自网上,侵删~