创建散点图

在 R 中,可视化数据的基本函数是 plot( )。如果我们只为 plot( )提供一个数值
向量或整数向量,它将按索引顺序产生一个散点图。例如,以下代码按递增顺序创建包含
10 个点的散点图,如图 7-3 所示。
plot(1:10)

 


图 7-3
192 第 7 章 数据处理
我们可以通过生成两个线性相关的随机数值向量来创建更真实的散点图,如图 7-4 所示。
x <- rnorm(100)
y <- 2 *x + rnorm(100)
plot(x, y)

 


图 7-4
1.自定义图形元素
在图 7-5 中,有许多图表元素是可以自定义的。常见的自定义元素有:标题(main 或
者使用函数 title( ))、x 轴标签(xlab)、y 轴标签(ylab)、x 轴范围(xlim)以及 y 轴
范围(ylim):
plot(x, y,
main = "Linearly correlated random numbers",
xlab = "x", ylab = "2x + noise",
xlim = c(-4, 4), ylim = c(-4, 4))

 


图 7-5
图表的标题既可以用参数 main 设定,也可以调用 title( )函数来指定。因此,上
述代码等价于以下代码:

plot(x, y,
xlim = c(-4, 4), ylim = c(-4, 4),
xlab = "x", ylab = "2x + noise")
title("Linearly correlated random numbers")
2.自定义点的类型
散点图的默认点样式为圆形。通过指定 pch 参数(plotting character),我们可以更改
点的样式。共有 26 种点的样式可供选择,如图 7-6 所示。
plot(0:25, 0:25, pch =0:25,
xlim = c(-1, 26), ylim = c(-1, 26),
main = "Point styles (pch)")
text(0:25+1, 0:25, 0:25)

 


图 7-6
上述代码生成了一个散点图,包含了所有可用的点样式,并在旁边标注了对应的pch 编号。
先用plot( )创建一个简单的散点图,然后用text( )在每个点右侧打印对应的pch 编号。
像许多其他内置函数一样,plot( )函数对于 pch 以及一些其他参数都是向量化的。
它可以自定义散点图中每个点的样式。例如,最简单的情况,只需要设置一个非默认的点
样式 pch= 16,就可以将其应用到所有的点,如图 7-7 所示。
x <- rnorm(100)
y <- 2 *x +rnorm(100)
194 第 7 章 数据处理
plot(x, y, pch =16,
main = "Scatter plot with customized point style")

 


图 7-7
有时,我们需要根据逻辑条件将点分成两组,如图 7-8 所示。由于 pch 是向量化的,
可以使用 ifelse( )函数,通过检查每个点是否满足条件来指定该点的样式。在下面的
示例中,我们希望将满足 x*y>1 的点设置为 pch=16,若不满足则 pch=1。
plot(x, y,
pch = ifelse(x * y >1, 16, 1),
main = "Scatter plot with conditional point styles")

 


图 7-8
还可以用 plot( )和 points( )在同一个 x 轴上绘制两个数据集中的点。在上述例
子中,我们生成了一个正态分布的随机向量 x 和一个与之线性相关的随机向量 y。现在,
生成另一个随机向量 z,它与 x 具有非线性关系,再用不同的点样式绘制出 y 和 z 关于 x
的图像,如图 7-9 所示。
z <- sqrt(1 + x ^2) + rnorm(100)
plot(x, y, pch = 1,
xlim = range(x), ylim = range(y, z),

xlab = "x", ylab = "value")
points(x, z, pch = 17)
title("Scatter plot with two series")

 


图 7-9
在生成 z 之后,我们先绘制 y 关于 x 的图,然后用不同的 pch 值添加另一组对应 z
的点。注意,如果不指定 ylim = range(y,z),绘图生成器将会只考虑 y 的范围,而 y
轴的范围可能会比 z 范围更窄。不幸的是,points( )不会自动延长 plot( )所创建的
坐标轴,因此超出坐标轴范围的点都会消失。上述代码对 y 轴设置了一个合适的范围,使
得 y 和 z 中的所有点都可以在绘图区域中显示出来。
3.自定义点的颜色
如果图形没有限定为灰度打印,我们还可以通过设置 plot( )的颜色参数使用不同颜
色来标记点,如图 7-10 所示。
plot(x, y, pch =16, col = "blue",
main = "Scatter plot with blue points")

 


图 7-10
跟 pch 一样,col 也是一个向量化的参数。用同样的方法,我们可以根据一定的条件
用不同的颜色将点分成两类,如图 7-11 所示。
plot(x, y, pch =16,
col = ifelse(y >=mean(y), "red", "green"),
main = "Scatter plot with conditional colors")

 


图 7-11
注意,如果散点图是根据灰度打印的,则颜色指的就是不同的灰度强度。
同样,也可以用 plot( )和 points( ),但是需要使用不同的 col 区分不同的点组,
如图 7-12 所示。
plot(x, y, col = "blue", pch = 0,
xlim = range(x), ylim = range(y, z),
xlab = "x", ylab = "value")
points(x, z, col = "red", pch = 1)
title("Scatter plot with two series")

 


图 7-12
R 支持常用的颜色名和一些其他颜色(共 657 种)。调用 colors( )函数可以得到 R 支
持的完整颜色列表。

posted @ 2019-01-22 14:23  NAVYSUMMER  阅读(464)  评论(0编辑  收藏  举报
交流群 编程书籍