-1

我如何ggplot使用这些数据我尝试正常绘图并且它工作得很好,但是当我使用时我想要更好的可视化ggplot,它给了我上面的错误,我该如何解决这个问题?

这是谱聚类算法的一种实现。并且代码运行良好,数据分类正确。我现在只需要展示这个。

library(ggplot2)

input_data <- as.matrix(read.table("SpectData.txt"))
colnames(input_data) <- c("x1", "x2")

#1- Define Weights matrix
W <- matrix(0,nrow = nrow(input_data),ncol = nrow(input_data))

#2- Define Degree Matrix
D <- matrix(0,nrow = nrow(input_data),ncol = nrow(input_data))

calculateWeight <- function(x1,x2,sigma) {
  result <- exp(- (norm(x2-x1,type = "2"))^2/ (2*sigma^2))
  result
}

calcWieghtMatrix <- function(sigma) {
  for(i in 1: nrow(W)){
   for(j in 1: nrow(W)){
    if(i == j){
      next
    }
    if( W[i,j] != 0){
      next
    }

    W[i,j] <<- calculateWeight(input_data[i,],input_data[j,],sigma)
    W[j,i] <<- W[i,j]
  }
 }
}    

calcDegreeMatrix <- function()  {
  for( i in 1:nrow(input_data)){
    D[i,i] <<- sum(W[i,])
  }
}

executeSpectralClustring <- function (sigma,numberOfClusters){
  calcWieghtMatrix(sigma)
  calcDegreeMatrix()
  L <<- D - W
  eigenDecompostion <- eigen(L,symmetric = FALSE)
  index <- ncol(eigenDecompostion$vectors)-1
  eigenVector <- eigenDecompostion$vectors[,index] 
  cl <- kmeans(eigenVector,numberOfClusters)
  ggplot(input_data,col = cl$cluster)
}    

executeSpectralClustring(0.01,2)
4

3 回答 3

3

只需将类矩阵转换为数据框,并确保将该数据框存储在另一个对象中。

dataFrame<-data.frame(classMatrix)

现在,在这个对象上使用 ggplot dataFrame

于 2018-02-17T19:37:05.633 回答
0

ggplot 通用函数没有矩阵方法,大概是因为矩阵可以以不同的方式解释以用于绘图目的(例如,在转换为长格式时是否应该考虑第一列特别重要?)。但是,您可以轻松定义自己的方法(从技术上讲,您可能应该编写一个强化方法),

m <- cbind(1:10, sin(1:10), cos(1:10))
ggplot.matrix <- function (data = NULL, mapping = aes(), ..., environment = parent.frame()) 
{
    d <- reshape2::melt(as.data.frame(data), 1)
    ggplot(d, mapping, environment = environment)
}

ggplot(m, aes(V1,value, colour=variable)) + geom_line()

在此处输入图像描述

于 2017-02-07T03:18:13.633 回答
-1

我将 input_data 转换为数据框并使用

ggplot(input_data1,aes(x=input_data1$x1, y=input_data1$x2, colour = cl$cluster))+ geom_point(shape=19)
于 2017-02-06T21:01:12.970 回答