R入门(二)---快捷键、plot基础画图,多图拼接

不得不说的小心情哇

哇唔,开启分享的第二天,虽然都是代码的搬运工,但是,分享也是一种乐趣。再一次感谢大鹏。

快捷键

箭头赋值党的福利啊,表白==>Alt+_
没有一个好记性,求助==>Tab帮你自动搜寻字母打头的函数;
实现在脚本面板和Console面板自由切换:Ctrl+1Ctrl+2
快捷键大全(估计不会看系列)==>Alt+Shift+K
无意间点击成了Ctrl+Shift+r自动在你Rstudio,当前脚本面插入了节,惊不惊喜,意不意外,哈哈哈;
新建脚本:Ctrl+Shift+n
批量替换(大爱):Ctrl+Alt+Shift+m
傻傻分不清楚,对不对,对就对了。手动微笑。。。。。

正经开始今天的记录了

昨天的数据再来一遍

> mydata2 <- as.data.frame(t(matrix(
+   co2,12,
+   dimnames = list(month.abb,unique(floor(time(co2)))))))
> #在数据上多增加一列year,将行名转为数值型
> mydata2$year<-as.numeric(rownames(mydata2))
#plot()画图,若数据为一维,则数据实际值对应纵坐标,序号对应横坐标
plot(mydata2$Sep)
#除F1,进行help外另一个好帮手example()
example(plot)
#二维散点图
plot(x=mydata2$year,mydata2$Sep)
#数据是多少变量名,就是变量与变量之间的散点图
plot(mydata2)
#此时类似于pairs(mydata2)
#像excel那样地查看数据
View(mydata2)

小助理三剑客:F1、sample()、demo()
demo()示范的函数有限,demo()运行后显示的是能示范的函数

常用画图函数

函数用途
plot()主要用作散点图
pairs()散点图矩阵
symbols()气泡图
hist()直方图
curve()函数曲线图
barplot()柱状图
boxplot()箱线图
coplot()条件散点图
dotchart()点图(克利夫兰点图)
stripchart()一维散点图
image()矩阵方格图
contour()等高线图
plot()函数

x,y分别表示横纵轴数据,
xlab=,ylab=,来定义横纵坐标轴标签,
main=,定义标题
type=,定义把数据画成点还是线,(可供选择的有p,l,b,c,o,h,s,S,n)
Alt
cex,(character expansion)点的尺寸
lty=,(line type )线的形状
pch=’ ',(point character)点的类型,可以自定义字母,或者是下面的数字
lty和pch数值表示
(图片来源于《学R》、《R图形化数据分析》)
总结:
先确定type
type=‘p’—>设置pch参数;type=‘l’—>设置lty参数。

R的颜色
  • 关于R的所有颜色 http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
  • 当col=colors[n],对应的是n位置上的颜色,n的范围[1,657]
  • 可以用colors()查看R中的657种颜色的名称
  • 关于自带配色方案的函数:rainbow(n)heat.colors(n)terrain.colors(n)topo.colors(n)cm.colors(n)gray(n)hcl(n) (>_< ) n表示的是将对应颜色分为多少n份颜色**
    将数据进行三维展示
#将数据降维
myco2 <- unlist(mydata2[,1:12])
#为了简化操作,对浓度四舍五入
myco2 <- round(myco2)
#用向量myyear存储第二个维度
myyear <- rep(mydata2$year,12)
#用向量mymonth存储第三个维度
mymonth <- rep(1:12,each=nrow(mydata2))
#三个维度的数据准备完毕
#n根据浓度范围,确定的颜色种数
n <- diff(range(myco2))
mycolor <- rainbow(n)[myco2-min(myco2)+1]
#画图
plot(x=mymonth,y=myyear,col=mycolor,cex=10,pch=15)

三维
按照横轴是浓度的月变化,纵轴式浓度的年变化,颜色越偏紫,浓度越大,浓度越偏红,浓度越小。

#练习3.1
mydata2$mean <- apply(mydata2,FUN = mean,MARGIN = 1)
plot(mydata2$year,mydata2$mean,type = 'p',pch=17,col='yellow',
     xlab = 'year',ylab = 'mean',main = 'homework3.1')

美丽的作业哇

添加直线、网格、图例

  1. abline()
plot(x=mydata2$year,mydata2$Sep)
abline(h=350)
abline(h=360,v=1980,col='red')
abline(h=seq(from=320,to = 340,by = 5),
       v=seq(from=1970,to = 1990,by = 5),
       col='gray')
abline(a=-2240,b=1.3)       

abline函数 分别向图中添加了三次直线, abline()参数中,h(horizontal)表示水平线,v(vertical)垂直线,两个参数可以同时存在。同时存在时,对线的颜色设置成浅灰色,就变成了网格线。
abline,“截距a和斜率b的直线”,也可以画斜线
3. legend()
位置的确定有三种,确定点的(X,Y)坐标、利用特殊位置的英文、定位

legend(x=1970,y=350,legend = 'Sep',pch = 1)
legend('topleft',legend = 'Sep',pch = 1)
legend(locator(1),legend = 'Sep',pch = 1)

legend函数
**注释:**可以替换的位置名称为:bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”, “topright”, “right”, “center”(9种)
练习3.2作业

plot(x=mydata2$year,y=mydata2$Sep)
abline(h=seq(from=min(mydata2$Sep),to = max(mydata2$Sep),by = 10),
       v=seq(from=min(mydata2$year),max(mydata2$year),by = 1),
       col='grey')

练习3.2

多图合一:三种布局

多图合一可以达到对比的效果,使多条曲线共享一个x-y坐标系。

第一种
  1. Step1:plot()函数画出第一组y1曲线
  2. Step2:用lines()或points()添加第二组y2曲线
#基础plot()图,在ylab的表达式中,[]表示的是下标(如图)
plot(x = 1:12,y = mydata2['1959',1:12],
     xlab = 'Month',ylab = expression(co[2]),
     ylim = c(310,370),
     type = 'l',lty=2,col='blue')
#points()和lines()函数添加曲线
lines(x = 1:12,y = mydata2['1997',1:12],
      col='red')
#或者
points(x = 1:12,y = mydata2['1997',1:12],col="red",type = 'l')

组合1

第二种
  • 副坐标轴
    上图中年份变化不明显,现在采取同横坐标,不同纵坐标,也就是创建副坐标轴
#创建副坐标轴(一次表达不明的错误尝试)
plot(x = 1:12,y = mydata2['1959',1:12],
     xlab = 'Month',ylab ='1959',
     type = "l",lty=2,col='blue')
par(new=TRUE)
plot(x = 1:12,y = mydata2['1997',1:12],ylab = '1997',
     type = 'l',lty=1,col='red')

错误

#进入正餐
#1.告诉R在右侧为副坐标轴留出空间
par(mar=c(5,4,4,4))
#2.画第一张图
plot(x = 1:12,y = mydata2['1959',1:12],
     xlab = 'Month',ylab ='1959',
     type = "l",lty=2,col='blue')
#3.告诉R,下一张图跟第一张图叠加
par(new=TRUE)
#4.画在第二张图,但暂时不画坐标轴,也不加标签
plot(x = 1:12,y = mydata2['1997',1:12],
     type = 'l',lty=1,col='red',axes = FALSE,
     ylab = '',xlab = '')
#5.在右侧画出副坐标轴
axis(side = 4,col = 'red')
#6.为副坐标轴添加名称
mtext(side = 4,text = '1997',line = 3,col = 'red')

在这里插入图片描述
注释:
1.第一三条,par(mar=c())表示给下,左,上,右(顺时针)分别留白多少,par(new=TRUE)表示指定下一条作图命令跟上一条作图区域相同.
2.第四条plot()函数,axes=FALSE, 禁止显示默认的坐标轴.
3.第五条axis()仍然是设置坐标轴,此时自定义设置,side取值1,2,3,4.表示的是下,左,上,右(顺时针),该条命令表示在右侧画一条红色的坐标轴.
4.mtext(),添加文字,作为新坐标轴的标签,side的取值和含义同理.line表示文字与图表区的距离.

第三种
  • 小图拼贴
    par(mfrow=c()),mfrow表示(matrix of figures entered row-wise)将图按照几行几列进行展示
#按照一行两列一次进行画图
par(mfrow=c(1,2))
plot(x = 1:12,y = mydata2['1959',1:12],
     xlab = 'Month',ylab ='1959',
     type = "l",lty=2,col='blue')
plot(x = 1:12,y = mydata2['1997',1:12],
     xlab = "Month",ylab = '1997',
     type = 'l',lty=1,col='red')

mfrow组合

保存图片

代码法

#代码法保存图片
#打开一张宽为8,高为4的白纸
pdf('F:/R lab/学R/r4r/fig2_13.pdf',width = 8,height = 4)
#在白纸上画图
plot(x = mydata2$year,y = mydata2$Jan)
#画完了,把纸张收起来
dev.off()

注释: pdf()函数将图片保存为pdf格式.还可以用png(),jpg()等

项目内容
作图函数plot(), boxplot()
点形状pch=1,pch=‘z’
线形状lty=2
颜色col = ‘blue’, rainbow(), colors()
添加要素lines(), points(), abline(), axis(),box(),legend(), text(), mtext(), expression()
多图布局par(), layout()
保存图片pdf(), jpg(), png()
不得不再一次表白大鹏,简洁明了
#练习3.3
x <- mydata2$year[1:6]
y <- mydata2$Sep[1:6]
#方案1:逐个画图
pdf('F:/R lab/学R/r4r/9in1.pdf')
par(mfrow=c(3,3),cex=1.2,mar=c(3,2,0.5,1))
plot(x = x,y = y,type = 'p')
legend('topleft',legend = 'p',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'l')
legend('topleft',legend = 'l',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'b')
legend('topleft',legend = 'b',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'c')
legend('topleft',legend = 'c',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'o')
legend('topleft',legend = 'o',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'h')
legend('topleft',legend = 'h',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 's')
legend('topleft',legend = 's',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'S')
legend('topleft',legend = 'S',
       cex = 0.8,bty = 'n',text.col = 'blue')
plot(x = x,y = y,type = 'n')
legend('topleft',legend = 'n',
       cex = 0.8,bty = 'n',text.col = 'blue')
dev.off()
#方案2:循环化简操作
pdf('F:/R lab/学R/r4r/9in1.pdf')
par(mfrow=c(3,3),cex=1.2,mar=c(3,2,0.5,1))
for (i in c('p','l','b','c','o','h','s','S','n')) {
  plot(x = x,y = y,type = i)
  legend('topleft',legend = i,
         cex = 0.8,bty = 'n',text.col = 'blue')
}
dev.off()

厉害的图片

#准备数据
mydatasub <- t(mydata2[as.character(
  seq(1960, by = 5, length.out = 8)), 1:12])
x <- rep(1:12, 8)
y <- as.vector(mydatasub)
group <- rep(colnames(mydatasub), each = 12)
library(lattice)
xyplot(y ~ x|group, type = c('p', 'l'), 
       xlab = 'Month', ylab = expression(CO[2]))

library(ggplot2)
qplot(x, y, col = group, geom = c("point", "line"), 
      xlab = 'Month', ylab = expression(CO[2]))

在这里插入图片描述图2
注释:

  1. 函数
  • seq(from=,to=,by=.length.out=n)length.out表示等差的个数
  • t()转置,转置前,从mydata2中,将等差数列形成的数字,转为因子型,找到对应年份12个月的浓度,相当于subset()函数,subset(数据,条件,选择哪些变量进行展示) (但是我没试出来)
  1. 转换逻辑
  • 因为要将年份作为X轴,所以需要将年份作为列来展示,在将矩阵(二维)降为向量(一维),默认一列一列进行展示.故用到t().
  • 将数据拆散,维度必须都相等,比如,此案例中数据量是12x8, 因此对于年份或者月份重复时,务必保持数据量相等,在对年份或者月份进行重复,rep()函数参数设置中选择是times=,还是each=,要根据浓度展开的含义.
名称作用
F1展示函数的帮助信息
F2演示函数源代码
tab提示和自动补全
example()函数示例,圆括号里填函数名
demo()演示,圆括号为空时查看所有可用演示
vignette()技术文档,vignette(all = TRUE)展示所有可用文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值