如何使用 R 语言来绘制图表和图(曲线等)
如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 R 语言。但是有那么多可以数据分析的语言,为什么要使用 R 呢?因为 R 可以输出非常好的可以出版的图像,对于博客可能不需要这样,但是对于论文、书籍这种出版物就很有必要了,毕竟大多数出版物的图表都不是彩色的。扇形图、条形图、曲线图、扇形图
前言
如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 R 语言。但是有那么多可以数据分析的语言,为什么要使用 R 呢?因为 R 可以输出非常好的可以出版的图像,对于博客可能不需要这样,但是对于论文、书籍这种出版物就很有必要了,毕竟大多数出版物的图表都不是彩色的。
需要注意,本文只用于记录如何使用 R 来绘制图表或图,所以只对语句有简单的介绍,如果想看全面完整的语句介绍,可以看官方文档:《An Introduction to R》
绘制各种图表
绘制扇形图
这时候让我们新建一个,但是不要绘制坐标轴了。
首先需要生成一些数据用来显示,这部分内容如下(输入>
开头的行即可):
margin.table(UCBAdmissions,3) -> Department
margin.table(UCBAdmissions, 3)
会通过数据集UCBAdmissions
(这个数据是伯克利招生的数据,自带的)来生成一个表Department
。然后使用pie()
函数来生成“Department”各部分占比的扇形图:
pie(Department)
绘制条形图
简单的条形图
还是上面一节的数据,利用它们来继续生成条形图。生成条形图使用barplot()
函数即可,xlab=
是横轴的标题,ylab=
是纵轴的标题:
barplot(Department, xlab="Department", ylab="Number")
堆叠条形图
生成复合条形图的话,上面那种数据格式就不够用了,所以重新生成一个表:
margin.table(UCBAdmissions, c(1,3)) -> Admit.by.Dept
如果直接使用barplot()
来调用数据的话,生成的条形图如下:
barplot(Admit.by.Dept)
并排条形图
如果想生成两个并排靠在一起的条形图,使用以下语句:
barplot(Admit.by.Dept, beside=T, ylim=c(0,1000), legend=T, main="Admissions by Department")
beside=T
表示beside
为真(T
表示True
),如果为真的话,绘制成并列条形图,如果为假的话,那么就生成上面的堆叠条形图;ylim=
表示纵轴的范围;legend
表示图例,也就是下图右上角那个,这里既可以使用 T/F 来表示是否显示图例,也可以直接输入值来自定义图例;main
表示主标题。
绘制曲线图
绘制曲线图不能使用上面这种按类分列的表,所以来使用faithful
数据集进行演示。
首先引入faithful
数据集来做好准备:
attach(faithful)
然后使用plot(density(...))
来生成曲线图:
plot(density(waiting))
waiting
为横轴标签。
绘制点图
点图需要使用一个新的数据集来进行演示,>
开头的是需要手动输入的:
> data(mammals, package="MASS")
> str(mammals)
'data.frame': 62 obs. of 2 variables:
$ body : num 3.38 0.48 1.35 465 36.33 ...
$ brain: num 44.5 15.5 8.1 423 119.5 ...
第一行生成了一个数据集mammals
。输入str(mammals)
可以看到数据的内容,但是这里由于太长了就没有显示完全。
然后使用attach()
函数导入数据集,然后使用plot()
函数绘制图像:
attach(mammals)
plot(log(body), log(brain))
这里需要注意以下,绘制图像的语句还可以这样:
plot(x=body, y=brain, log="xy")
二者效果一样。
这时候可以发现点好像聚集在一条线附近,R 支持绘制出这条线:
scatter.smooth(log(body), log(brain))
绘制图(坐标轴、曲线等)
添加坐标轴
画绝大部分类型的图表的第一步当然是添加坐标轴啦。语句很简单,需要使用plot()
函数,如下:
plot(0:100, 0:100, type="n", xlab="a", ylab="b")
这时候效果如下:
plot()
函数是一个“high-level”函数。括号中的0:100
表示坐标从0
开始到100
;type="n"
表示只绘制坐标轴,不绘制任何其他的图像(感兴趣可以去掉这个参数看看默认情况下的点图是什么样的);xlab="a"
表示横坐标轴的标签,ylab="b"
同理。
绘制曲线
然后来在上面的坐标轴中绘制
b
=
0.01
a
2
b=0.01a^2
b=0.01a2 的曲线,需要使用curve()
函数,如下:
curve(x^2/100, add=TRUE)
这里应该只用解释一下add=TRUE
是干嘛的。add=TRUE
会强制curve()
函数作为一个“low-level”图像来绘制曲线,从而将其绘制在当前已经存在的图像上面(如果有的话)。
绘制点
绘制点分为两种:绘制单独的点,以及绘制某一曲线上的点。但是不论哪种类型,一般都要使用points()
函数。
按顺序来,先讲讲前者。绘制单独的点的语句很简单,直接使用坐标即可,如下:
points(100,50)
可以看到在曲线的右侧绘制了一个空心的圆点。
那么如果想在 b = 0.01 a 2 b=0.01a^2 b=0.01a2 的曲线上标记一些点呢?有两种方法,一种和一个个输入差不多,不过可以结合到一起,稍微精简一点,如下:
points(x=c(20, 60, 90), y=c(4, 36, 81), pch=6)
但是也可以使用另外一种方法,只用输入横坐标x
和函数即可,如下:
points(x<-c(20,60,90), y=x^2/100, pch=6)
二者效果一样的:
更改点的样式
那么可不可以更改点的样式呢?加上pch
参数即可,如下:
points(100,50, pch=...)
pch=
后面可以直接跟+
、*
这种符号,用引号包裹就行。比如说想点变成星号*
就可以像下面这样:
points(100,50, pch="*")
也可以跟数字,不同数字表示的内容如下:
此外:
- 26~31 之间的数字没有作用;
- 2/32~127 之间是对应着 ASCII 码;
- 128~255 之间是仅在单字节的位置的原始字符,并且使用符号字体,其中 129~159 只能在 Windows 中使用;
- -32 用来在支持的地方使用 Unicode 码。
绘制直线(以及自定义线的颜色)
假设现在需要过曲线上两点做一条红色的直线,那么可以使用abline()
函数和col
参数,如下:
abline(a=-18, b=1.1, col="red")
其中a=
后面跟的是纵坐标;b=
后面跟的是斜率;col=
后面跟的是颜色。
设置主标题
设置主标题需要使用title(main="...")
函数,如下:
title(main="This is the first chart of R")
在图中的任意位置绘制文本
假设我们想在曲线
b
=
0.01
a
2
b=0.01a^2
b=0.01a2 旁边写上函数式,那么可以使用text()
函数,如下:
text(x=80, y=37, expression(a == frac(1,100) * b^2))
其中,a
和b
是将显示在图上的,而前面的x
和y
是不能修改的。
希望可以帮到有需要的人~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)