*本文为《R in action》图形基础部分笔记
pdf()
png()
jpeg()
bmp()
tiff()
xfig()
postscript()
将图形储存为相应格式,在Rstudio里储存为pdf格式也可以直接手动操作
pdf("mygraph.pdf")
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
detach(mtcars)
dev.off()
plot()
中的type指绘图形式,l为line,p为point,b为both
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
plot(dose, drugA, type="b")
plot(dose, drugA)
par()
设定绘图的一些特征参数
no.readonly=TRUE option produces a list of current graphical settings that can be modified.
lty: line type,
pch: point type
cex: plotting symbol scale,
lwd: line width
col: line color,
bg: background color,
col.axis, col.main:title , col.lab, col.sub
opar <- par(no.readonly=TRUE)
par(lty=2, pch=17)
plot(dose, drugA, type="b")
par(opar)
font:整数,用于设定字体样式,1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示)
family:绘制文本时使用的字体族,标准的取值为serif(衬线)、sans(无衬线)、mono(等宽)
family=”mono”/”serif”/”sans”
图形尺寸与边界
pin:以英寸表示的 图形尺寸(宽和高)
mai:以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸
mar:以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分。Default:c(5,4,4,2)+0.1
par(pin = c(4,3), mai=c(1, .5, 1, .2))
#4英寸宽3英寸高,上下边界为1英寸,左边界为0.5英寸,右边界为0.2英寸
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(pin=c(2, 3))
par(lwd=2, cex=1.5)
par(cex.axis=.75, font.axis=3)
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="blue")
par(opar)
main:主标题
sub:副标题
xlab/ylab:x、y轴标签
xlim/ylim:x、y轴坐标范围 xlim = c(0,60)
在某些高级绘图语句中以及包含了默认的标题和标签,可以通过在plot语句或单独的par语句中添加ann=FALSE来移除
title()
添加标题和坐标轴标签
title(main = “”, sub = “”, xlab = “”, ylab = “”)
title 中亦可指定其他参数如字体大小与颜色等
axis()
坐标轴函数
axis(side, at= , labels= ,pos=, lty=, col=, las=, tck=, …)
side:表示刻度线的绘制位置(1=下,2=左,3=上,4=右)
at:数值型向量,表需要绘制刻度线的位置
labels:字符型向量,刻度线旁边的文字标签,若为NULL,则直接使用at中的值
pos:坐标轴线绘制位置的坐标(即与另一条坐标轴相交的位置的值)
las:标签与坐标轴的位置,0=平行,2=垂直
tck:刻度线长度,相对于绘图区域大小的分数表示,负数表示在图形外侧,正数表示在图形内侧,0表示禁用刻度,1表示绘制网格线,default=-0.01
次要刻度线
library(Hmisc)
minor.tick(nx=n, ny=n, tick.ratio=n)
nx/ny:指定了X与Y轴每两条主刻度线之间通过次要刻度线划分得到的区间个数
tick.ratio:次要刻度线相对于主要刻度线的大小比例
参考线:abline()
abline(h=yvalue, v=xvalue)
abline(h=c(1,5,7))
在y为1、5、7的位置添加了水平实线
同样,在abline中也可以指定其他图形参数(颜色、线条类型及宽度等)
图例:legend()
legend(location,title,legend,…)
location:给定图例位置,可以给定x,y坐标,也可以执行locatior(1),然后通过鼠标单击给出图例位置。也可以使用关键字(bottom/bottomleft/left/topleft/top/topright/right/bottomright/center)如果使用了关键字,可以同时搭配inset=指定图例向图形内侧移动的大小(以绘图区域大小的分数表示)
title:标题,字符串,选填
legend:图例标签组成的字符向量
horiz:horiz=TRUE表水平放置图例,FALSE为垂直放置
其他常用参数:bty,bg,cex,text.col
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(pin=c(4, 5))
par(lwd=2, cex=1.5)
par(cex.axis=.75, font.axis=3)
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
lines(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="blue")
legend("topleft", inset=.05, title="drug type", c("A","B"), lty = c(1, 2), pch = c(15,17), col = c("red", "blue"))
par(opar)
文本标注
text(x, y = NULL, labels = seq_along(x$x), adj = NULL,
pos = NULL,…) #向绘图区域内部添加文本
mtext(text, side = 3, line = 0,...)#向图形的四个边界之一添加文本
location: 可以给定x,y坐标,也可以执行locatior(1)
pos:文本相对位置参数的额方位,1=下,2=左,3=上,4=右,指定pos后可以同时指定offset=作为偏移量,以相对于单个字符宽度的比例表示
side:指定用来放置文本的边,1=下,2=左,3=上,4=右。可以指定参数line=来内移或外移文本,随着值得增加,文本将外移。adj=0将文本向左下对齐,adj=1文本向右上对齐
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.5, pos=4, col="red")
detach(mtcars)
#row.names()表示行的名字
数学标注
expression()
公示转化函数
#make a hist but use the desity
par(mfrow = c(1,1))
hist(rnorm(100),xlim=c(-3,3),freq=FALSE)
# add a normal curve here
# ’expr’ must be a function or an expression containing ’x’
x<-seq(-5,5,.01)
curve(dnorm(x),add=TRUE)
# add a density expression
text(x=2, y=.35,
expression(paste("f(x)=",frac(1,sqrt(2*pi)*sigma),
exp(-frac(1,2*sigma^2)*((x-mu)^2)))))
#use help:demo(plotmath) to get more details
分屏
#将屏幕分为两行
split.screen(c(2,1))
#将第一行(1)分为两列,记做3、4
split.screen(c(1,2),1)
#将第二行(2)分为三列,记做5、6、7
split.screen(c(1,3),2)
screen(3)
par(bty="o")
plot(0,main="par(bty=\"o\")")
screen(4)
par(bty="l")
plot(0,main="par(bty=\"l\")")
screen(5)
par(bty="7")
plot(0,main="par(bty=\"7\")")
screen(6)
par(bty="n")
plot(0,main="par(bty=\"n\")")
screen(7)
par(bty="c")
plot(0,main="par(bty=\"c\")")
分频法二:layout(mat)
,mat为一个矩阵,指定所组合的多个图形所在的位置
attach(mtcars)
layout(matrix(c(2,3,1,1),2,2,byrow = TRUE)) #2,3,个图形被放置在第一行,第一个图形被放置在第二行
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
在layout函数中使用widths和heights参数可以控制每个图形的的大小
widths:各列宽度值组成的一个向量(相对宽度直接使用数值指定,绝对宽度使用lcm函数指定)
heights:各行高度值组成的一个向量
attach(mtcars)
layout(matrix(c(2,3,1,1),2,2,byrow = TRUE),widths=c(3,1),heights=(1,2))
fig:在单张图形上绘制多张图时控制图形布局【书上篇幅不大,我觉得参数设定有点玄学】
第一个fig=将散点图设定为占据横向范围0到0.8,纵向范围0到0.8。
上方的箱线图横向占据0到0.8,纵向0.55到1。右侧的箱线图横向占据0.65到1,纵向0到0.8。fig=默认会新建一幅图形,所以在添加一幅图到一幅现有图形上时,请设定参数new=TRUE。
opar<-par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8))
plot(mtcars$wt,mtcars$mpg,xlab = "miles per callon",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)