散点图与颜色分组 - 基础 R 绘图

5

我有一个简单的散点图

x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)

我想绘制plot(x,y),但点的颜色应根据z进行编码。
此外,我希望能够定义z应该有多少组(因此颜色),并且这种分组应该对异常值具有抵抗力(也许将z密度分成n个等密度组)。
到目前为止,我一直在手动完成这项工作,有没有自动完成的方法?
注意:我想使用基本的R语言而不是ggplot
1个回答

11

您可以将颜色向量传递给col参数,因此只需要以在您的应用程序中有意义的方式定义z组即可。基本上有一个cut()函数,或者在Hmisc中有cut2()函数,它提供了更多的灵活性。为了帮助选择合理的颜色调色板,RColorBrewer软件包是非常有价值的。在定义x,y,z之后,这是一个快速示例:

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow"))
plot(x,y, col = as.character(z.cols), pch = 16)

图片描述

你可以手动添加一个legend。不幸的是,我认为并不是所有类型的图都接受向量作为col参数,但显然type = "p"能够工作。例如,plot(x,y, type = "l", col = as.character(z.cols)) 对我来说只会显示一种颜色。对于这些类型的图,你可以使用 lines()segments() 或其他所需的低级绘图命令来添加不同的颜色。在这里,查看@Andrie提供的在基础绘图中使用type = "l"的方法


cut()函数是否会将内容分成相等的间隔? - ECII
@ECII - 默认情况下不支持此功能。Hmisc:::cut2() 提供了 m 参数,可以设置每个组中的最小观测数,使得这个过程变得容易。类似于 z.cols2 <- cut2(z, m = length(z) / 3) 的代码应该就能解决问题了。 - Chase
在cut2函数中,g参数不应该是g=3更好吗?cut2(z, g=3)? - ECII
附带说明:如果您想根据y值设置颜色,显然只需将z替换为y即可使用这些“cut”工具。 - Carl Witthoft
@ECII - 大概就是六个一半,我以前总是用m参数,但你说得对,这里也许更适合用g参数。感谢你的提示! - Chase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接