在数据集中,我想采用两个属性并创建有监督的散点图.有谁知道如何为每个班级提供不同的颜色?
我试图col == c("red","blue","yellow")
在plot命令中使用,但不确定它是否正确,好像我再包含一种颜色,即使我只有3个类,该颜色也会出现在散点图中.
谢谢
Ani*_*iko 64
这是使用传统图形(和Dirk的数据)的解决方案:
> DF <- data.frame(x=1:10, y=rnorm(10)+5, z=sample(letters[1:3], 10, replace=TRUE))
> DF
x y z
1 1 6.628380 c
2 2 6.403279 b
3 3 6.708716 a
4 4 7.011677 c
5 5 6.363794 a
6 6 5.912945 b
7 7 2.996335 a
8 8 5.242786 c
9 9 4.455582 c
10 10 4.362427 a
> attach(DF); plot(x, y, col=c("red","blue","green")[z]); detach(DF)
Run Code Online (Sandbox Code Playgroud)
这取决于DF$z
一个因素,因此当通过它进行子集化时,其值将被视为整数.因此,颜色矢量的元素将z
如下变化:
> c("red","blue","green")[DF$z]
[1] "green" "blue" "red" "green" "red" "blue" "red" "green" "green" "red"
Run Code Online (Sandbox Code Playgroud)
您可以使用以下legend
函数添加图例:
legend(x="topright", legend = levels(DF$z), col=c("red","blue","green"), pch=1)
Run Code Online (Sandbox Code Playgroud)
Ram*_*ath 16
这是我基于此页面构建的示例.
library(e1071); library(ggplot2)
mysvm <- svm(Species ~ ., iris)
Predicted <- predict(mysvm, iris)
mydf = cbind(iris, Predicted)
qplot(Petal.Length, Petal.Width, colour = Species, shape = Predicted,
data = iris)
Run Code Online (Sandbox Code Playgroud)
这给你输出.您可以轻松地从该图中发现错误分类的物种.
Dir*_*tel 10
一种方法是使用晶格包和xyplot():
R> DF <- data.frame(x=1:10, y=rnorm(10)+5,
+> z=sample(letters[1:3], 10, replace=TRUE))
R> DF
x y z
1 1 3.91191 c
2 2 4.57506 a
3 3 3.16771 b
4 4 5.37539 c
5 5 4.99113 c
6 6 5.41421 a
7 7 6.68071 b
8 8 5.58991 c
9 9 5.03851 a
10 10 4.59293 b
R> with(DF, xyplot(y ~ x, group=z))
Run Code Online (Sandbox Code Playgroud)
通过变量提供明确的分组信息z
,您可以获得不同的颜色.您可以指定颜色等,请参阅晶格文档.
因为z
这是一个我们获得水平(==数字指数)的因子变量,你也可以这样做
R> with(DF, plot(x, y, col=z))
Run Code Online (Sandbox Code Playgroud)
但那不太透明(对我来说,至少:)然后xyplot()
等.
这是我在 2018 年的做法。谁知道呢,也许 R 新手有一天会看到它并爱上它ggplot2
。
library(ggplot2)
ggplot(data = iris, aes(Petal.Length, Petal.Width, color = Species)) +
geom_point() +
scale_color_manual(values = c("setosa" = "red", "versicolor" = "blue", "virginica" = "yellow"))
Run Code Online (Sandbox Code Playgroud)
小智 2
如果您将类分隔在数据框或矩阵中,那么您可以使用matplot
. 例如,如果我们有
dat<-as.data.frame(cbind(c(1,2,5,7),c(2.1,4.2,-0.5,1),c(9,3,6,2.718)))
plot.new()
plot.window(c(0,nrow(dat)),range(dat))
matplot(dat,col=c("red","blue","yellow"),pch=20)
Run Code Online (Sandbox Code Playgroud)
然后您将得到一个散点图,其中 的第一列dat
绘制为红色,第二列绘制为蓝色,第三列绘制为黄色。当然,如果您希望颜色类别有单独的 x 和 y 值,那么您可以使用datx
和daty
等。
另一种方法是附加一个额外的列,指定您想要的颜色(或保留一个额外的颜色向量,用循环for
和一些if
分支迭代地填充它)。例如,这将为您提供相同的情节:
dat<-as.data.frame(
cbind(c(1,2,5,7,2.1,4.2,-0.5,1,9,3,6,2.718)
,c(rep("red",4),rep("blue",4),rep("yellow",4))))
dat[,1]=as.numeric(dat[,1]) #This is necessary because
#the second column consisting of strings confuses R
#into thinking that the first column must consist of strings, too
plot(dat[,1],pch=20,col=dat[,2])
Run Code Online (Sandbox Code Playgroud)