如何获得每种分布的不同形状和颜色的混合数据的散点图?

时间:2017-03-29 02:07:45

标签: r

我正在运行混合数据的模拟。我的功能比高斯分布更难。因此,在这里,我将我的问题简化为高斯形式。也就是说,如果我模拟这样的混合数据:

  N=2000
 U=runif(N, min=0,max=1)
 X = matrix(NA, nrow=N, ncol=2)
         for (i in 1:N){
              if(U[i] < 0.7){
               X[i,] <-   rnorm(1,0.5,1)
                    } else {
               X[i,] <- rnorm(1,3,5)
      }
 }

如何为每个群集或分布创建具有不同颜色和形状(绘图点类型)的散点图?我想手动操作,因为我的功能很复杂。我试过plot(X[,1],X[,2],col=c("red","blue")),但它不起作用。

2 个答案:

答案 0 :(得分:1)

这是我得到的,但我不确定你是否正在寻找 - 这两个集群的观察位置完全相同。

library(tidyverse)
df <- data.frame(X = X, U = U)
df <- gather(df, key = cluster, value = X, -U)
ggplot(df, aes(x = X, y = U, colour = cluster)) + geom_point() + facet_wrap(~cluster)

enter image description here

编辑:我似乎并没有理解您要映射到散点图上的内容,因此我将指出您需要如何对数据进行整形,以便使用正确的X创建如上图所示的图表。 Y坐标:

 head(df)
            U cluster          X
 1 0.98345408     X.1  2.3296047
 2 0.33939935     X.1 -0.6042917
 3 0.66715421     X.1 -2.2673422
 4 0.06093674     X.1  2.4007376
 5 0.48162959     X.1 -2.3118850
 6 0.50780007     X.1 -0.7307929

所以你想要一个变量用于Y坐标(我在这里使用变量U),一个变量用于X坐标(在这里使用X),第三个变量指示是否观察属于集群1或集群2(此处为变量cluster)。

答案 1 :(得分:1)

我认为这就是你想要的。请注意,我必须在这里做一些猜测来弄清楚发生了什么,因为你的示例代码似乎有错误,你没有在每一行中生成不同的x1和x2值:

N=2000
U=runif(N, min=0,max=1)
X = matrix(NA, nrow = N, ncol=2)
for (i in 1:N){
    if(U[i] < 0.7){
        # You had rnorm(n=1, ...) which gives 2 identical values in each row
        # Change that to 2 and you get different X1 and X2 values
        X[i,] <-   rnorm(2, 0.5, 1)
    } else {
        X[i,] <- rnorm(2, 3, 5)
    }
}

df = data.frame(
    source = ifelse(U < 0.7, "dist1", "dist2"),
    x = X[, 1],
    y = X[, 2]
)

library(ggplot2)
ggplot(df, aes(x = x, y = y, colour = source, shape = source)) +
    geom_point()

结果:

Scatter plot