我有一个简单的散点图
x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)
我想绘制
plot(x,y)
,但点的颜色应根据z
进行编码。此外,我希望能够定义
z
应该有多少组(因此颜色),并且这种分组应该对异常值具有抵抗力(也许将z
密度分成n
个等密度组)。到目前为止,我一直在手动完成这项工作,有没有自动完成的方法?
注意:我想使用基本的R语言而不是
ggplot
。我有一个简单的散点图
x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)
plot(x,y)
,但点的颜色应根据z
进行编码。z
应该有多少组(因此颜色),并且这种分组应该对异常值具有抵抗力(也许将z
密度分成n
个等密度组)。ggplot
。您可以将颜色向量传递给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"
的方法。
Hmisc:::cut2()
提供了m
参数,可以设置每个组中的最小观测数,使得这个过程变得容易。类似于z.cols2 <- cut2(z, m = length(z) / 3)
的代码应该就能解决问题了。 - Chasem
参数,但你说得对,这里也许更适合用g
参数。感谢你的提示! - Chase