es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo canal RGB a la matriz 2D [R]

Aquí hay una matriz de ejemplo:

mymat<-matrix(runif(24*24), ncol=24)

Puedo trazar esta matriz usando ggplot2, por lo que puedo obtener una representación en color de los valores:

plot_mat <- function(mat){ mat_df<- reshape2::melt(mat) plt <- mat_df %>% ggplot2::ggplot(aes(Var2, Var1)) + geom_raster(aes(fill = value)) +scale_fill_gradientn(colours = c(‘blue’, ‘green’, ‘yellow’, ‘red’)) + theme_bw()
return(plt)
}

plot_mat(mymat)

Me gustaría agregar un canal RGB a mis datos sin convertirlos en una imagen. Me gustaría agregar otra dimensión a mi mymat, para que la salida dim (mymat) se vea 24, 24, 3. Desafortunadamente, no sé cómo hacerlo.

Agradecería su ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un canal RGB a su matriz, puede crear una nueva matriz con las dimensiones deseadas (24, 24, 3) y asignar los valores de su matriz original a las dos primeras dimensiones y establecer la tercera dimensión usando un valor fijo o un gradiente. Aquí hay un ejemplo de código para lograr esto:

    # crear matriz original
    mymat <- matrix(runif(24*24), ncol=24)
    
    # crear matriz vacía con dimensiones deseadas
    rgbmat <- array(0, dim = c(24, 24, 3))
    
    # asignar valores a las dos primeras dimensiones
    rgbmat[, , 1] <- mymat
    rgbmat[, , 2] <- mymat
    
    # crear gradiente para tercera dimensión (de azul a rojo)
    gradient <- seq(0, 1, length.out = 24)
    gradient <- replicate(24, gradient, simplify = FALSE)
    
    # asignar gradiente a tercera dimensión
    rgbmat[, , 3] <- gradient
    
    # verificar las dimensiones resultantes
    dim(rgbmat) # debería producir 24 24 3
    
    # trazar la matriz con valores RGB
    plot_rgbmat <- function(mat){
      mat_df <- reshape2::melt(mat)
      plt <- mat_df %>% ggplot2::ggplot(aes(Var2, Var1)) +
        geom_raster(aes(fill = value, alpha = value)) +
        scale_fill_gradientn(colours = c('azul', 'verde', 'amarillo', 'rojo')) +
        guides(alpha = FALSE) +
        theme_bw()
      return(plt)
    }
    
    plot_rgbmat(rgbmat)
    

    En el ejemplo anterior, asignamos los valores de mymat a las dos primeras dimensiones de rgbmat y creamos un gradiente de azul a rojo para la tercera dimensión. Luego trazamos la matriz resultante usando la función plot_rgbmat que agrega un canal alfa para asegurarse de que los valores RGB sean visibles. Tenga en cuenta que utilizamos el argumento guides(alpha = FALSE) para eliminar la escala alfa de la trama.

Comments are closed.