前言

如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 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开始到100type="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="*")

也可以跟数字,不同数字表示的内容如下:
请添加图片描述
此外:

  1. 26~31 之间的数字没有作用;
  2. 2/32~127 之间是对应着 ASCII 码;
  3. 128~255 之间是仅在单字节的位置的原始字符,并且使用符号字体,其中 129~159 只能在 Windows 中使用;
  4. -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))

其中,ab是将显示在图上的,而前面的xy是不能修改的。
请添加图片描述

希望可以帮到有需要的人~

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐