目录
1. 图形参数
2. 低级图形
3. 部分高级图形
参考
1. 图形参数
图形参数用于设置图形中各种属性。
有些参数直接用在绘图函数内,如plot函数可以用 pch(点样式)、col(颜色)、cex(文字符号大小倍数)、lty(线条样式)、 lwd(线条宽度)等参数。
有些图形参数必须使用par()函数指定。 par函数指定图形参数并返回原来的参数值, 所以在修改参数值作图后通常应该恢复原始参数值。
通过
opar <- par(mfrow=c(2,2)) ... par(opar)
或
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 在图上标散点
# 在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 加图例
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为标签。
axis(1, at=seq(x), labels=names(x))
2.6 图中添加文字
在图中(x,y)处添加文字‘线性回归’,左对齐
adj=0:这是调整文本位置的参数。
adj=0 表示文本左对齐,adj=1 则表示右对齐,adj=0.5 表示居中对齐。
text(x, y, adj=0, '线性回归:')
3. 部分高级图形
3.1 条形图
> 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】
> 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)的位置 。
> 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('沈阳'=沈阳,'北京'=北京)))
with(d.cancer, boxplot(v0 ~ sex)) #【3】
3.4 正态qq图
正态QQ图, 当变量样本来自正态分布总体时, 正态QQ图的散点近似一条直线。
> # 生成符合正态分布的值
> y<-rnorm(100)
> # 做正态qq散点图
> qqnorm(y)
> # 上下两个四分位点的连线
> qqline(y,col='red',lwd=2)
代码实现qq图,比较是否服从正态【4】
# 真实分布下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 散点图
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')做曲线图。
> # 做法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')
绘制多条曲线
> 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)