-1

Как я могу сделать ggplot работать с этими данными Я пробовал нормальный график, и он работает нормально, но я хочу лучше визуализировать, когда я использую ggplot, он дает мне вышеуказанную ошибку. Как исправить это?Ошибка: ggplot2 не знает, как обращаться с данными матрицы классов?

Это реализация алгоритма спектральной кластеризации. и код работает хорошо, и данные классифицируются правильно. Мне просто нужно показать это сейчас.

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) 
+3

преобразовать 'matrix' в' data.frame' –

+0

, когда я конвертирую входные данные в кадр данных, он дает мне пустой участок! Что я делаю не так ? –

+0

Что именно вы ожидали от этого? вы на самом деле не говорите ему ничего о чем-то. 'ggplot()' принимает фрейм данных (как сказал Сандипан), а затем вы должны сказать ему, как сопоставить эстетику для построения таких элементов, как значения x и y, или цвета. 'col = cl $ cluster' не является стилем ggplot2. вы можете сопоставить цвет с именем столбца без '' ''. Но что более важно, вы никогда не объявляли какую-либо геометрию (например, точку, бар, линию и т. Д.). Там есть много хорошей документации, чтобы помочь вам! – Matt74

ответ

-1

я преобразовал input_data в кадр данных, и решить ее с помощью

ggplot(input_data1,aes(x=input_data1$x1, y=input_data1$x2, colour = cl$cluster))+ geom_point(shape=19) 
+0

, хотя это решение может создать хороший сюжет для вас, лучше использовать НЕ использовать нотацию '' 'в ggplot2; просто используйте имена исходных столбцов – Matt74

+0

Теперь я вижу, что из-за этого у меня возникают проблемы за последние 10 минут. любые идеи, как я могу изменить цвета моих данных в ggplot! –

+0

Это не просто практика, чтобы избежать этого - использование '$' в aes ** всегда ** ошибка. – baptiste

0

не существует матричный метод для обобщенной функции ggplot, по-видимому, потому что матрица может быть интерпретирована по-разному для построения (например, следует ли считать первый столбец особенно важным при преобразовании в длинный формат?). Вы можете легко определить свой собственный метод, однако (технически возможно, стоит написать FORTIFY метод),

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() 

enter image description here

0

Просто преобразовать класс матрицу фрейма данных и сделать убедитесь, что вы храните этот кадр данных в другой объект.

dataFrame<-data.frame(classMatrix) 

Теперь использование ggplot на этом объекте dataFrame.

Смежные вопросы