R语言入门之折线图
时间:2022-07-22
本文章向大家介绍R语言入门之折线图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
折线图
第一部分:概述 & 简单绘图
在R语言中可以使用基本绘图函数lines(x, y, type=)来绘制线条,这里参数x和y分别是数值型向量,代表着横坐标和纵坐标的数据,参数type=主要是用来控制线条的类型。
这里需要指出的是lines()函数本身不产生任何图形,通常情况下它只有在plot()函数后使用才会在图片上添加相关线条。
#在R中分号(;)可以将两个命令连接成一行,如下所示
x <- c(1:5); y <- x # 产生相关数据用于绘图,类似于分别执行x <- c(1:5)和y <- x
par(pch=22, col="red") # 设置绘图符号和颜色,下图表示的就是绘图符号
par(mfrow=c(2,4)) # 设置绘图版面,将画布设置成2行4列的格式,共8个绘图区域
opts = c("p","l","o","b","c","s","S","h") #构建type=类型
for(i in 1:length(opts)){
heading = paste("type=",opts[i])
plot(x, y, type="n", main=heading)
lines(x, y, type=opts[i])
}
# 接下来我们将展示在plot()函数中去除type=这个参数之后的效果
x <- c(1:5); y <- x # create some data
par(pch=22, col="blue") # plotting symbol and color
par(mfrow=c(2,4)) # all plots on one page
opts = c("p","l","o","b","c","s","S","h")
for(i in 1:length(opts)) {
heading = paste("type=",opts[i])
plot(x, y, main=heading)
lines(x, y, type=opts[i])
}
# 这里利用for循环来绘制不同区域的图形
从上图中可以看出,只有当绘制点的功能在plot()命令中被抑制时,这个type="c"项才会看起来和type="b"不同。
第二部分:复杂折线图的绘制
接下来我们将利用R语言内置的Orange数据集来展示如何绘制更为复杂的折线图。这里每棵树都会有自己独特的线条。
#首先我们先了解一下Orange(O要大写)数据的基本信息
?Orange
从返回的信息可以看出,该数据集主要有三个参数,一个是Tree,它实际上是树的ID号,从1~5表示共有5棵树,而age表示的是测量时间与
从返回的信息可以看出,该数据集主要有三个参数,一个是Tree,它实际上是树的ID号,从1~5表示共有5棵树,而age表示的是测量时间与1968年12月31日相隔的日数,而circumference则表示树干的周长,所以简单的来看我们可以利用这组数据绘制出每棵树的树干周长随时间变化的趋势。
# 将因子型数据转换成数值型,方便接下来的处理
#推荐读取数据时先设置options(stringsAsFactors=F)
Orange$Tree <- as.numeric(Orange$Tree)
ntrees <- max(Orange$Tree) #获取树的数目
# 获取x轴和y轴的范围
xrange <- range(Orange$age)
yrange <- range(Orange$circumference)
# 绘制图形
plot(xrange, yrange, type="n", xlab="Age (days)",
ylab="Circumference (mm)" )
colors <- rainbow(ntrees) #rainbow()函数是用来获取颜色参数的
linetype <- c(1:ntrees) # 获取线条形状
plotchar <- seq(18,18+ntrees,1) # 获取绘图符号(pch)
# 添加折线
#lwd表示的是线宽,lty表示线的类型,col表示颜色
for (i in 1:ntrees) {
tree <- subset(Orange, Tree==i)
lines(tree$age, tree$circumference, type="b", lwd=1.5,
lty=linetype[i], col=colors[i], pch=plotchar[i])
}
# 添加标题和副标题
title("Tree Growth", "example of line plot") #第一个参数是主标题,第二个则是副标题
# 添加图例
legend(xrange[1], yrange[2], 1:ntrees, cex=0.8, col=colors,
pch=plotchar, lty=linetype, title="Tree")
#添加水平线和垂线
lines(x=c(500,500), y=c(0,500)) #添加垂线
lines(x=c(0,2000), y=c(120,120)) #添加水平线
需要注意的是,在legend()里的第1个参数是图例在图中位置的横坐标,第2个参数则是位置的纵坐标,第3个参数即为图例要展示的信息,剩下的几个参数就是颜色、绘图符号、线条类型以及图例的标题。
从图中我们可以简单看出第5棵树的生长速度最快,第1颗树最慢。实际上,Orange数据集里对树的编号就是按生长速度来设置的,生长越快其编号越大。今天的内容就分享到这里,咱们下期再见!
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- 10个Python面试常问的问题
- 关关的刷题日记11——Leetcode 1. Two Sum 方法2、3
- 计蒜客:百度的科学计算器(简单)【python神解】
- 关关的刷题日记12——Leetcode 189. Rotate Array 方法1、2、3
- 关关的刷题日记13——Leetcode 414. Third Maximum Number
- 关关的刷题日记14——Leetcode 167. Two Sum II - Input array is sorted
- 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)
- 【专知-关关的刷题日记15】Leetcode 27. Remove Element 方法1、2、3
- [接口测试 - 基础篇] 07 来来来,一起读写excel玩玩之一
- 时间序列分析算法【R详解】
- 【专知-关关的刷题日记16】Leetcode 88. Merge Sorted Array
- [接口测试 - 基础篇] 06 好吧也来解析下html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!
- 面试官:什么是字节码?它最大的优势是什么?
- 数组转List,一定要小心这个坑!
- 【小白学PyTorch】5.torchvision预训练模型与数据集全览
- 实战 | Python爬取B站柯南弹幕+Gephi梳理主线剧情
- Docker 部署SpringBoot项目不香吗?
- 面试官写了个双冒号::问我这是什么语法?Java中有这玩意?
- 精解四大集合框架:List核心知识总结
- 【深度学习】Keras vs PyTorch vs Caffe:CNN实现对比
- 【深度学习】迁移学习理论与实践
- 使用OpenCV+Tensorflow跟踪排球的轨迹
- 基于OpenCV的手掌检测和手指计数
- 错误诊断:索引数据错误导致ORA-00600 [kdsgrp1]处理
- Python让你成为AI 绘画大师,简直太惊艳了!(附代码))
- PostgreSQL全局临时表插件pgtt的使用