R--创建图形

手动输入数据

mydata<-data.frame(age=numeric(0),gender=numeric(0),weight=numeric(0))
mydata<-edit(mydata)
#使用edit()可以手动输入数据,并且还可以改变列名什么的

#值标签
patientdata$gender<-factor(patientdata$gender,levels=c(1,2),labels=c("males","female"))
#使用levels和labels相互对应,创建字符型向量的值标签```

#创建图形

weight<-c(32,43,23,43)
mpg<-c(12,21,9,22)
mtcars<-data.frame(weight,mpg)

将绘图语句夹在开启图形设备和关闭图形设备之间即可输出图形

pdf("mygraph.pdf")
attach(mtcars)
plot(weight,mpg)
abline(lm(mpg~weight))
title("regression of mpg on weight")
detach(mtcars)
dev.off()```

简单的绘图例子

dose<-c(20,30,40,45,60)
drugA<-c(16,20,27,40,60)
drugB<-c(15,18,25,31,40)
#"p" for points,"l" for lines,"b" for both
dev.new()
plot(dose,drugA,type="b")

#dev.new()必须在设置参数之前,要不然就会使用默认参数重新绘图
dev.new()
opar<-par(no.readonly=TRUE)
#这种是指定全局参数
par(lty=2,pch=17)
#指定坐标轴标签字体为斜体,标题为粗斜体
par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=2)
plot(dose,drugA,type="b")
title("the influence of the drugA")
par(opar)
#为高级绘图函数指定参数,只对这幅图有效
dev.new()
plot(dose,drugA,type="b",lty=2,lwd=2,pch=17,cex=1.5)
#lwd指定线宽,相对大小,cex指定符号的大小,具体代表值查书45页
dev.new()
plot(dose,drugA,type="b",lty=3,lwd=3,pch=15,cex=2)```

#指定颜色

n<-10
mycolors<-rainbow(n)

pie() draw a pie chart,labels are the names of the colors

dev.new()
pie(rep(1,n),labels=mycolors,col=mycolors)

rep(1,n) replicates the values in x for n times and generates a vector as [1,1,...,1]

mygrays<-gray(0:n/n)
dev.new()
pie(rep(1,n),labels=mygrays,col=mygrays)

first par in pie as a vector of non-negative numerical quantities.

and the values in x are displayed as the areas of pie slices.```

设置图形尺寸pin,mai,mar

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)
#pin返回图形大小
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="green")
#bg是来设置绘制符号的背景色的
par(opar)```

#使用高级绘图函数内置参数设置标题,坐标轴等

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))
plot(dose,drugB,type="b",col="blue",lty=2,pch=2,lwd=2,
main="Clinical Trials for Drug B",
sub="This is hypothetical data",
xlab = "Dosage",ylab = "Drug Response",
xlim=c(0,60),ylim = c(0,70))

设置参数分别是颜色,线型,绘图标志,线宽,主标题,副标题,x轴标签,y轴标签,x轴的坐标范围,y坐标范围```

使用title()函数,运行位置是在绘图之后进行添加的

#高级函数包含了标题或者标签,使用par(ann=FALSE)或者在绘图函数中使用ann=FLASE来移除
#par(ann=FALSE)
plot(dose,drugA,ann=FALSE)
title(main="my title",col.main="red",
      sub="my sub title",col.sub="blue",
      xlab="my x label",ylab="my ylabel",col.lab="green",
      cex.lab=.75)
par(opar)```

#自定义坐标轴axis(),

side表示在图形哪边绘制坐标轴,1234,下左上右,

at绘制刻度线的位置,输入是向量

labels表示刻度线旁边的标签

las表示标签垂直2还是平行0于坐标轴,tck图形内侧正值还是外侧负值默认-0.01

pdf("mydata.pdf")
x<-c(1:20)
y<-x
z<-20/x

opar<-par(no.readonly = TRUE)
par(mar=c(5,4,4,8)+0.1)

绘制一条直线,yaxt表示禁用y轴刻度,ann禁用默认标签

plot(x,y,type = "b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE)

绘制20/x线,lines()为一幅现有的图添加新的图形元素

lines(x,z,type="b",pch=22,col="blue",lty=2)
axis(2,at=x,labels=x,col.axis="red",las=2)

slices<-z[c(1,11,13,15,17,19)]

axis(4,at=z,labels = round(z,digits = 2),col.axis="blue",las=2,cex.axis=0.7,tck=-0.01)

line是控制文字内移还是外移,数字越大,越往外

mtext("y=1/x",side=4,line=2,cex.lab=1,las=2,col="blue")
title("An example of creative axes",xlab = "x values",ylab="y=x")
library(Hmisc)

使用次要刻度线,nx=2表示将2个刻度线之间分为两个区间,也就是加一条次要刻度线

minor.tick(nx=2,ny=3,tick.ratio = 0.5)
par(opar)
dev.off()```

参考线和图例,abline(),legend()

#这里是指定x与x轴垂直的参考线,abline(h=yvalues,v=xvalues)
abline(x=seq(1,10,2),lty=2,col="blue")
#在x为1,3,5,7,9的位置添加了垂直的蓝色虚线
pdf("mylegend.pdf")
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="Drug A vs. Drug B",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)
#inset表示向内侧移动的大小,按照全图比例来说,legend参数表示图例标签
legend("topleft",inset=0.05,title="Drug Type",legend=c("A","B"),
       lty=c(1,2),pch=c(15,17),col=c("red","blue"))
par(opar)
dev.off()```

#文本标注,绘图区域内部text()和mtext()图形的四个边界添加文本

text(wt,mpg,row.names(mtcars),cex=0.6,pos=4,col="red")

使用wt,mpg作为标注的x,y坐标,row.names作为标记文本内容,cex作为调整字号,pos作为文本位置,1234下左上右,col为颜色

pdf("mytext.pdf")
opar<-par(no.readonly = TRUE)
par(cex=1.5)
plot(1:7,1:7,type="n")
text(3,4,"example of default text")
text(4,5,family="mono","example of default text")
text(6,6,"say you love me",cex=0.6,pos=1,col="blue")
par(opar)
dev.off()```

图形的组合,par(mfrow=c(2,2)),按行填充,mfcol按列填充

par(mfrow=c(2,2))
#后面是画的图,plot或者hist等函数,就会自动的填充到这个组合图形中
par(mfcol=c(3,1))

pdf("mylayout.pdf")
wt<-c(12,32,43,54,64)
mpg<-c(23,43,34,53,23)
disp<-c(1,2,3,4,5)
#layout(matrix(c(1,1,2,3),2,2,byrow=TRUE))
#表示宽两个图第一个占3份,第二个占1份,高度第一个占1份,第二个占2份
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),widths = c(3,1),heights = c(1,2))
#按行填充3行一列
#par(mfrow=c(3,1))
#par(mfrow=c(2,2))
hist(wt)
hist(mpg)
hist(disp)
dev.off()```

#图形的精细控制

使用par的fig参数进行控制

pdf("myfig.pdf")
wt<-c(12,32,43,54,64)
mpg<-c(23,43,34,53,23)
disp<-c(1,2,3,4,5)
opar<-par(no.readonly = TRUE)
par(fig=(c(0,0.8,0,0.8)))
plot(wt,mpg,xlab = "miles per gallon",ylab = "car weight")
par(fig=c(0,0.8,0.55,1),new=TRUE)
boxplot(wt,horizontal=TRUE,axes=FALSE)

fig=默认会新建一幅新的图形,所以在添加一幅图到现有的图形的时候,设定参数new=TRUE

par(fig=c(0.65,1,0,0.8),new=TRUE)
boxplot(mpg,axes=FALSE)

outer表示use outer margins if available,line:on which margin line,starting at 0 counting out wards

mtext("enhanced scatterplot",side=3,outer=TRUE,line=-3)
par(opar)
dev.off()```

创建图形

#创建图形最基本的函数plot()
#plot是一个泛型函数,真正被调用的函数依赖于对象所属的类
plot(c(1,2,3),c(4,2,5))
#plot是分若干阶段执行的,这样就可以用一系列命令分若干步来构建一幅完整的图形
#首先可以绘制空白图形,向其中添加坐标轴
#type="n"表示不要给图中添加任何元素
#绘制坐标轴,这样确定了坐标轴的范围
#其实这样是随着数据点而变化的
plot(c(-5,3),c(-1,6),type="n",xlab="x",ylab="y")
x <- c(1,2,3)
y <- c(1,3,8)
#只是添加了3个点
plot(x,y)
#abline()函数添加线
#计算线性回归
lmout <- lm(y~x)
abline(lmout)```

#abline函数

参数是斜率和截距,lmout里面的lmout$coefficients中就包含了斜率与截距

abline(c(2,1))```

lines函数

#使用lines函数先向图形添加点,然后用直线将其连起来
lines(c(1.5,2.5),c(2,3))

#只画出线条不需要点,使用参数type="l"
plot(x,y,type="l")```

#指定线型

help("par"),中lty参数,0是空白,1是实线,2是虚线等等

plot(x,y,type="l",lty=2)```

在现有图形基础上新增绘图窗口

#Linux下X11(),windows下windows()
hist(x)
windows()
hist(y)```

#points函数

向现有的图形中添加一系列的点对x,y,输入可以是向量,绘图将一一对应

points(x,y,pch="+")```

legend()函数

#为拥有多条曲线的图中添加图例```

#text()函数

在图形的任意位置加上一些文字

text(2.5,4,"abc")

字符串的中心,b刚好位于点2.5,4

text()函数和locator函数结合使用

text(locator(1),"i love you")```

locator()函数

#精确定位
locator(1)```

#定制图形

cex选项

用于放大或者缩小图形中的字符

text(locator(1),"love",cex=1.5)```

R图形设备

pdf("12.pdf")
#显示图形设备列表
dev.list()
#RStudioGD图形设备编号是2,pdf编号是3
#显示活动设备
dev.cur()
#保存已经显示的图形
#方法是将当前屏幕设置为活动设备,然后将内容复制到PDF设备上
dev.set(2)
dev.copy(which=4)
#关闭R图形设备
#创建的pdf文件必须在关闭设备之后才能正常使用
dev.off()```

你可能感兴趣的:(R--创建图形)