#图形初阶
getwd()
par(mfrow=c(1,1)) #快速回答一图部署局面
#线性回归画图
attach(mtcars)
plot(wt,mpg) #画散点图
abline(lm(mpg~wt)) #在原图上添加回归线
title("Regression of MPG on Weight") #在修改后的图上,增加图标题
detach(mtcars)
#代码保存图片
pdf("mygraph.pdf") #第一步,打开图片存储的目标文件
#第二步,画图
attach(mtcars)
plot(wt,mpg) #画散点图
abline(lm(mpg~wt)) #在原图上添加回归线
title("Regression of MPG on Weight") #在修改后的图上,增加图标题
detach(mtcars)
#第三步,关闭图片存储的目标文件
dev.off()
#对于windows,手动在图形窗口中选择“文件”-》“另存为”,在弹出对话框中选择想要的格式和保存位置即可
#图是覆盖,解决方法一,dev.new()
dev.new() #弹出新的画布窗口
#画原始图
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') #散点图,dose对应x轴数据,drugA对应y轴数据
#方法一:利用全局图形参数来定制图形
opar <- par(no.readonly = TRUE) #筛选可修改的全局变量,导出备份,方便还原
par(lty=2,pch=17) #lty修改连线,pch修改点符号
plot(dose,drugA,type='b') #线属性,点属性,均已经发生变化,新图出现
par(opar) #还原原始全局变量定义
#方法二,plot()函数,参数直接控制
# 控制参数解释
# 指定符号
# pch 每个数字对应不同的符号,15~20实心图标
# cex默认为1,指定符号大小,1.5表示放大为默认值的1.5倍
# 指定线条
# lty 指定线条类型,1实线,2虚线,3点线,4点短线段,5线段,6点长线段
# lwd 指定线条宽度
# ann=FALSE,可用于移除默认的标题和标签
plot(dose,drugA,type='b',lty=3,lwd=3,pch=15,cex=2)
# 美观参数解释
# col ,设定颜色,线数大于颜色数(红,绿)时,循环往后,3条(红,绿,红)
# col.axis 设定坐标轴刻度文字的颜色
# col.lab 坐标轴标签(名称)的颜色
# col.main 标题颜色
# col.sub 副标题颜色
# fg 图形的前景色
# bg 图形的背景色
colors() #反馈所有可用颜色的名称
#白色等价各种表示方法
col=1
col="white"
col="#FFFFFF"
col=rgb(1,1,1) #基于红,绿,蓝三色值生成颜色
col=hsv(0,0,1) #基于色相,饱和度,亮度值来生成颜色
#RColorBrewer软件包
install.packages("RColorBrewer")
library("RColorBrewer")
n <- 7
mycolors <- brewer.pal(n,"Set1") #创建一个颜色向量
barplot(rep(1,n),col=mycolors) #根据颜色向量,画7个条形图
#画彩虹图
n<-10
mycolors <- rainbow(n) #连续的颜色向量函数,创建10种连续的彩虹型颜色
pie(rep(1,n),labels = mycolors,col=mycolors) #10色彩虹饼图,文本标签以颜色名标识
#画灰度图
n<-10
mygrays <- gray(0:n/n) #创建10阶灰度色
pie(rep(1,n),labels = mygrays,col=mygrays) #10色灰度图,文本标签以颜色名标识
#文本缩放属性
# cex 默认为1,标识相对于默认大小缩放倍数的数值
# cex.axis 坐标轴刻度文字的缩放倍数
# cex.lab 坐标轴标签名称的缩放倍数
# cex.main 标题的缩放倍数
# cex.sub 副标题的缩放倍数
#字体样式属性
# font 1常规,2粗体,3斜体,4粗斜体,5符号字体,
# font.axis 坐标轴刻度文字的字体样式
# font.lab 坐标轴标签名称的字体样式
# font.main 标题的字体样式
# font.sub 副标题的字体样式
# ps 字体磅值
# family 绘制文本时使用的字体族
#之后创建的所有图形都将拥有斜体,1.5倍于默认文本大小的坐标轴标签,以及粗斜体,2倍于默认文本大小的标题
par(font.lab=3,cex.lab=1.5,font.main=4,cex.main=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)) #设定图形尺寸,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") #散点图,dose对应x轴数据,drugA对应y轴数据
plot(dose,drugA,type='b',pch=23,lty=6,col="blue",bg="green") #散点图,dose对应x轴数据,drugA对应y轴数据
par(opar)
#添加文本,自定义坐标轴和图例
#方法一:plot函数
#参数解释
# main 主标题(上方)
# sub 副标题(下方)
# xlab x轴文字标签
# ylab y轴文字标签
# xlim x轴刻度范围
# ylim y轴刻度范围
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)
)
#方法二:title函数,在现有图形基础继续增改
#一般来说用户将信息添加到一个ann=FALSE选项禁用了默认标题和标签的图表中
title(main="main title",sub="subtitle",xlab="x-axis label",ylab="y-axis label")
title(main="My Title",col.main="red",
sub="My Subtitle",col.sub="blue",
xlab="My X label",ylab="My y label",
col.lab="green",cex.lab=0.75
)
#axis定制坐标轴
#参数解释
#side 1=下,2=左,3=上,4=右
#at 数值型向量,表示需要绘制刻度线的位置
#labels 字符型向量,表示刻度线旁边的文字标签,如果为null,则将直接使用at中的值
#pos 坐标轴线绘制位置的坐标
#lty 线条类型
#col 线条和刻度线颜色
#las 看标签的视线是否0平行于图框当前侧,或者2垂直于坐标轴
#tck 刻度线的长度,负向,表示刻度线向图片外伸展,正向,表示刻度线向图片内伸展
#示范
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly = TRUE)
par(mar=c(5,4,4,8)+0.1) #逆时针,下边界5+0.1英寸,左边界4+0.1英寸,上边界4+0.1英寸,右边界8+0.1英寸
plot(x,y,type="b",pch=21,col="red",yaxt="n",lty=3,ann=FALSE) #简版散点图,ann抹掉y轴刻度,x,y轴标签,x轴刻度仍在
lines(x,z,type="b",pch=22,col="blue",lty=2) #在现有图上,追加一条线z=10/x
#左边加坐标轴y,其中观看刻度值垂直于坐标轴
axis(2,at=x,labels = x,col.axis="red",las=2)
#右边加坐标轴z
axis(4,at=z,labels = round(z,digits = 2),col.axis="blue",las=2,cex.axis=0.7,tck=-.01)
#在图形边界添加文本
mtext("y=10/x",side=4,line=3,cex.lab=1,las=2,col="blue")
#添加主标题,x轴标签,y轴标签
title("An Example of Creative Axes",xlab="X values",ylab="Y=x")
par(opar)
#添加参考线,中位数,绝对值等等,自定义坐标轴后,画出的线与值不匹配
abline(h=c(1,5,7),lwd=1.5,lty=2,col="red") #y的1,3,7值位置增加水平参考线
abline(v=c(8),lwd=1.5,lty=2,col="green") #x轴4,6,8,10位置增加垂直参考线
#范例
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"
)#x,y之间的关系,画出散点图中第一条线
#加线x,新y的关系,画图散点图中第二条线
lines(dose,drugB,type="b",pch=17,lty=2,col="blue")
#加水平参考线y=30
abline(h=c(30),lwd=1.5,lty=2,col="red")
#添加次要刻度线,即大刻度下继续划分小刻度线,精确下
install.packages("Hmisc")
library("lattice")
library("survival")
library("Formula")
library("ggplot2")
library("Hmisc")
#nx 指定x轴一个大区间将划分成几个小区间
#ny 指定y轴一个大区间将划分成几个小区间
#tick.ratio 表示新次要刻度线相对于原始大区间的刻度线的大小比例
minor.tick(nx=2,ny=3,tick.ratio = 0.5)
#参数解释
#location 图例在图形中的位置,
# 一对x,y坐标
# 或者locator(1)使用鼠标交互式的确定拜访位置
# bottom,bottomleft,bottomright,top,topleft,topright,center,right
#title 图例标题
#legend 图例标签组成的字符串向量
#inset 图例向图形内侧移动的大小,距离以百分比形式计算
legend("topleft",inset=.05,title="Drug Tyep",legend=c("A","B"),
lty=c(1,2),pch=c(15,17),col=c("red","blue")
)#A,1,15,red表示第一行,B,2,17,blue表示第二行
legend(locator(1),inset=.05,title="Drug Tyep",legend=c("A","B"),
lty=c(1,2),pch=c(15,17),col=c("red","blue")
)#此时控制台等待鼠标点击,确定放置地址
par(opar)
#文本标注
#示例一
attach(mtcars)
plot(wt,mpg,
main="Mileage vs. Car Weight",
xlab="Weight",
ylab="Mileage",
pch=18,col="blue"
)
#参数解释
# location 一对x,y坐标
# pos 文本相对于位置参数的方位,1=下,2=左,3=上,4=右
# side 指定用来放置文本的边,1=下,2=左,3=上,4=右
text(wt,mpg,
row.names(mtcars),
cex=0.6,pos=4,col="red"
) #基于点坐标(wt,mpg),文本标识对应的标识行名,行的唯一记录
detach(mtcars)
#示例二
opar <- par(no.readonly = TRUE)
par(cex=1.5)
plot(1:7,1:7,type="b") #点线都不画
#family 绘制文本时使用的字体库,serif衬线,sans无衬线,mono等宽
text(3,3,"Example of default text") #对点(3,3)标注描述
text(4,4,family="mono","Example of mono-spaced text") #对点(4,4),换一种字体库描述
text(5,5,family="serif","Example of serif text") #对点(5,5),换一种字体库描述
#数学标注
demo(plotmath) #反馈数学表达式的写法
x<-seq(0,4,0.01) #0-4之间,根据0.01的间隔生成一个数据序列,长度为400个
y <- sqrt(x) #基于x,生成y值
formula <- expression(y==sqrt(x)) #formula对象直接输出就是文本
plot(x,y,type="l",main=formula,las=1) #将标题写成公式
#图形组合
#范例一,2*2,mfrow,按行填充,优先填满第一行,mfcol,按列填充,优先填满第一列
attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow = c(2,2)) #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)
#范例二,mfrow,3*1,
attach(mtcars)
opar <- par(no.readonly = TRUE)
par(mfrow=c(3,1))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)
#范例三,layout参数,
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE))# 两行两列的矩阵,第一幅图位于第一行,第二幅图位于第二行左侧,第三幅图位于第二行右侧
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#范例三,layout参数,按比例控制
#widths 各行宽度值组成一个向量
#heights 各行高度值组成一个向量
#heights=c(1,2) 第一行中图形的高度是第二行中图形高度的1/2
# widths=c(3,1) 右下角图形的宽度是左下角图形宽度的1/3
attach(mtcars)
layout(matrix(c(1,1,2,3),2,2,
byrow=TRUE),
widths=c(3,1),heights=c(1,2))# 两行两列的矩阵,第一幅图位于第一行,第二幅图位于第二行左侧,第三幅图位于第二行右侧
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
#范例四,fig参数
opar <- par(no.readonly = TRUE)
par(fig=c(0,0.8,0,0.8)) #位置:x轴范围0-0.8,y轴范围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)#新图位置:x轴范围0-0.8,y轴范围0.55-1
boxplot(mtcars$wt,horizontal = TRUE,axes=FALSE)#第二幅图,在上方画
par(fig=c(0.65,1,0,0.8),new=TRUE)#新图位置:x轴范围0.65-1,y轴范围0-0.8
boxplot(mtcars$mpg,axes=FALSE)#第三幅图,在右侧画
mtext("Enhanced Scatterplot",side=3,outer=TRUE,line=-3)
par(opar)