R语言做图

目录

[1. 图形参数](#1. 图形参数)

[2. 低级图形](#2. 低级图形)

[3. 部分高级图形](#3. 部分高级图形)

参考


1. 图形参数

图形参数用于设置图形中各种属性。

有些参数直接用在绘图函数内,如plot函数可以用 pch(点样式)、col(颜色)、cex(文字符号大小倍数)、lty(线条样式)、 lwd(线条宽度)等参数。

有些图形参数必须使用par()函数指定。 par函数指定图形参数并返回原来的参数值, 所以在修改参数值作图后通常应该恢复原始参数值。

通过

R 复制代码
opar <- par(mfrow=c(2,2))
...
par(opar)

R 复制代码
opar <- par(mfrow=c(2,2))
on.exit(par(opar))

设置参数并在操执行完后回复par原始参数

R通过配置参数达到想要的效果,参数有很多,为了避免滥用或浪费。比如数如颜色大小是可以通用的,被分到了par里面,作为公共参数集合。如果plot的坐标轴要用颜色相关的属性,那么就可以去par中取来用。所以par可理解为公共参数列表。 【1】

详细参数参考

26 基本R绘图 | R语言教程 (pku.edu.cn)

2. 低级图形

低级绘图函数是在现有的图形上添加元素。

2.1 在图上直线

在R语言中,abline()函数用于在图形中添加一条直线。它可以添加水平线、垂直线或者通过指定截距和斜率来添加任意直线。

主要参数包括:

h: 添加一条水平线,参数值为水平线的y坐标。

v: 添加一条垂直线,参数值为垂直线的x坐标。

a、b: y=bx+a (此外a,b还有其它表示斜线方法)

2.2 在图上标散点

R 复制代码
# 在sin曲线上标出x为1,2,3三个点
special <- list(x=c(1,,2,3), y=sin(c(1,2,3)))
plot(seq(0,2*pi,length=100), sin(seq(0,2*pi,length=100)), type='l')
# 分别列出x,y坐标
points(special$x, special$y, col="red", pch=16, cex=2)
                
# 第一个参数还可以是x、y组成的列表list
points(special, col="red", pch=16, cex=2)

2.3 图上增加曲线

lines(x, fx, lwd=, col=)

参数需要(x,fx)坐标

2.4 加图例

R 复制代码
 legend(x, y, col=c("red", "blue"),  lty=c(1,1), lwd=c(2,2),  legend=c("f1_name", "f2_name"))

(x,y)为图例左上角坐标(即图例放在图的哪里)

2.5 自定义坐标轴

  • 在plot()函数中用 axes=FALSE可以取消自动的坐标轴。
  • 用box()函数画坐标边框。
  • 用axis函数单独绘制坐标轴。
  • axis的第一个参数取1,2,3,4, 分别表示axis所设置的是横轴、纵轴、上方和右方的坐标轴。
  • axis的参数at 为 刻度线位置,labels为标签。
R 复制代码
axis(1, at=seq(x), labels=names(x))

2.6 图中添加文字

在图中(x,y)处添加文字'线性回归',左对齐

adj=0:这是调整文本位置的参数。

adj=0 表示文本左对齐,adj=1 则表示右对齐,adj=0.5 表示居中对齐。

R 复制代码
text(x, y, adj=0, '线性回归:')

3. 部分高级图形

3.1 条形图

R 复制代码
> dframe <-read.csv("D:/demoData/StaBr/example/chap01/example1_1.csv",fileEncoding = "GBK")
> dtable<-table(dframe$性别)
> head(dframe)
   社区 性别 态度
1 A社区   男 反对
2 B社区   女 反对
3 D社区   女 反对
4 C社区   男 反对
5 A社区   男 赞成
6 D社区   女 反对
> # 条形图
> # xlim x轴范围、width条形宽度 legend显示图例
> barplot(dtable,main="性别分布",
+         col=c("pink",'lightblue'),
+         xlim=c(-2,5),width =0.5)
> # 构造列联表法一with(data, expr, ...)函数用于在一个从data构建出的环境中运行R表达式
> dtable2<-with(dframe,table(性别,态度))
> # 构造列联表法二
> dtable2_<-table(dframe$性别,dframe$态度)
> dtable2==dtable2_ #两方法结果一样
    态度
性别 反对 赞成
  男 TRUE TRUE
  女 TRUE TRUE
> # 列联表分段条形图
> barplot(dtable2,legend=TRUE,
+         xlim=c(-2,5),width =1,
+         col=c("pink",'lightblue'),
+         main="不同性别人态度")
> # 列联表并排条形图 beside
> barplot(dtable2,, beside=TRUE,
+         legend=TRUE,xlim=c(0,6),
+         width =0.5,col=c("pink",'lightblue'),
+         main="不同性别人态度")
> 

3.2 直方图和和密度图

直方图是数是一个连续变量的概率分布的估计,是一种条形图。 构建直方图包括分间隔(间隔必须相邻)、计算该间隔数据量。纵轴可以有频数和概率两种形式。

核密度估计是一种非参数估计,通过样本估计未知随机变量的概率分布。把每个设置的x轴序列点根据每个样本作用核函数**(概率密度函数)**并求平均得到该点估计概率密度,最终得到该样本的估计的概率分布。【2】

R 复制代码
> dframe <-read.csv("D:/demoData/StaBr/example/chap01/example1_2.csv",fileEncoding = "GBK")
> head(dframe)
  销售额
1    272
2    181
3    225
4    199
5    188
6    240
> d<-dframe$销售额
> # 频数直方图
> hist(d,col=rainbow(8),main="销售额分布",xlab='x',ylab='频数',ylim=c(0,30))
> # 频率直方图
> hist(d,freq = FALSE ,col=rainbow(8),main="销售额分布",xlab='x',ylab='频率',ylim=c(0,0.026))
> # 用核密度图估计概率分布
> # R 内置核函数 density() 
> lines(density(d),col="red",lwd=1)

3.3 箱型线

直观看到异常点、最大最小值、中位数和上下四分位数(0.25、0.75)的位置 。

R 复制代码
> dframe <-read.csv("D:/demoData/StaBr/example/chap02/example2_2.csv",fileEncoding = "GBK")
> head(dframe)
      日期 北京 上海 郑州 武汉 西安 沈阳
1 2019/1/1   45   40  158   62  215  114
2 2019/1/2   78   87  200   80  271  103
3 2019/1/3  162   73  204   95  340  103
4 2019/1/4   40   75  325  122  296   63
5 2019/1/5   47   64  142  214  258   51
6 2019/1/6   88   55  119  213  346  110
> boxplot(dframe$郑州)
> with(dframe,boxplot(list('沈阳'=沈阳,'北京'=北京)))
R 复制代码
with(d.cancer, boxplot(v0 ~ sex)) #【3】

3.4 正态qq图

正态QQ图, 当变量样本来自正态分布总体时, 正态QQ图的散点近似一条直线。

R 复制代码
> # 生成符合正态分布的值
> y<-rnorm(100)
> # 做正态qq散点图
> qqnorm(y)
> # 上下两个四分位点的连线
> qqline(y,col='red',lwd=2)

代码实现qq图,比较是否服从正态【4】

R 复制代码
# 真实分布下z值1~250
a <- seq(1, 250, 1)
# 得出某值的累积百分比
t <- (rank(a) -0.5)/length(a)
# 依据标准正态根据真实分布下数据累积百分比生成预期的正态分布的z值
q <- qnorm(t, mean=0,sd=1)
# x轴为用来比较的预期分布q,y轴则为真实数据a的分布情况
plot(q, a)
abline(mean(a), sd(a), col=2, lwd=2)

有关标准线斜率截距的得出【5】:

3.5 散点图

R 复制代码
dframe <-read.csv("D:/demoData/StaBr/example/chap01/table1_n.csv",fileEncoding = "GBK")
head(dframe)
with(dframe,plot(金融, 会计,pch=16, col='blue',cex=2))
     

利用大小cex可视化数据,增加表达维度:将第三维数据归一化

利用ifelse和颜色col增加表达维度:条件sex=='M'为真,执行返回'blue',否则返回'red'。

通过pairs()函数,生成多个变量间,两两变量间散点图矩阵

3.6 曲线图

使用 curve(f(x),x_left,x_right) plot(type='l')做曲线图。

R 复制代码
> # 做法1,第一个参数要以x为自变量
> curve(dnorm(x),-2,2,main='plot_l')
> # 做法2
> plot(seq(-2,2,0.1),dnorm(seq(-2,2,0.1)),type='l',main='plot_l')

绘制多条曲线

R 复制代码
> x<-seq(-2*pi,2*pi,length=1000)
> y1<-sin(x)
> y2<-cos(x)
# Lty指定实线,lwd表示线宽,xlim表示作图x轴范围
> matplot(x,cbind(y1,y2),lty=1,lwd=2,col=c('red','blue'),xlab='x_value',ylab='',xlim=c(-(1/2)*pi,(1/2)*pi),type='l')
# 在图中做直线,h是水平线、v则表示竖线
> abline(h=0,v=0,col='gray')

参考

【1】[3]R语言在数据处理上的禀赋------par参数详解(一) - 编程狗的博客 - 博客园 (cnblogs.com)

【2】核密度图(kernel density plot)原理详解和代码实现 - 知乎 (zhihu.com)

【3】26 基本R绘图 | R语言教程 (pku.edu.cn)

【4】正态性检验之qqplot和ppplot原理及R语言实现 - 简书 (jianshu.com)

【5】26 基本R绘图 | R语言教程 (pku.edu.cn)

相关推荐
赵钰老师2 小时前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
B站计算机毕业设计超人2 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
生信圆桌2 小时前
【生信圆桌x教程系列】如何安装 seurat V5版本R包,最详细安装手册
开发语言·r语言
Biomamba生信基地3 小时前
R语言基础| 功效分析
开发语言·python·r语言·医药
京东零售技术17 小时前
京东零售数据可视化平台产品实践与思考
数据可视化
数据分析能量站19 小时前
目标检测-R-CNN
目标检测·r语言·cnn
matlabgoodboy1 天前
数据分析帮做spss数据代分析stata实证python统计R语言eviews处理
python·数据分析·r语言
biomooc2 天前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言