varias studio lineas leyendas hacer graficos grafico graficas dispersion diagrama como r plot ggplot2 alpha

studio - ¿Alguna forma de hacer que los puntos de la trama en el diagrama de dispersión sean más transparentes en R?



leyendas en r (5)

Tengo una matriz de 3 columnas; las parcelas se hacen por puntos basados ​​en los valores de la columna 1 y la columna 2, pero se colorean en base a la columna 2 (6 grupos diferentes). Puedo trazar con éxito todos los puntos; sin embargo, el último grupo de trama (grupo 6) al que se le asignó el color púrpura, enmascara las tramas de los otros grupos. ¿Hay alguna manera de hacer que los puntos de la trama sean más transparentes?

s <- read.table("/.../parse-output.txt", sep="/t") dim(s) [1] 67124 3 x <- s[,1] y <- s[,2] z <- s[,3] cols <- cut(z, 6, labels = c("pink", "red", "yellow", "blue", "green", "purple")) plot(x, y, main= "Fragment recruitment plot - FR-HIT", ylab = "Percent identity", xlab = "Base pair position", col = as.character(cols), pch=16)


Al crear los colores, puede usar rgb y establecer su argumento alpha :

plot(1:10, col = rgb(red = 1, green = 0, blue = 0, alpha = 0.5), pch = 16, cex = 4) points((1:10) + 0.4, col = rgb(red = 0, green = 0, blue = 1, alpha = 0.5), pch = 16, cex = 4)

Por favor, vea ?rgb para más detalles.


De lo contrario, tiene la función alpha en scales paquete en la que puede ingresar directamente su vector de colores (incluso si son factores como en su ejemplo):

library(scales) cols <- cut(z, 6, labels = c("pink", "red", "yellow", "blue", "green", "purple")) plot(x, y, main= "Fragment recruitment plot - FR-HIT", ylab = "Percent identity", xlab = "Base pair position", col = alpha(cols, 0.4), pch=16) # For an alpha of 0.4, i. e. an opacity of 40%.


La transparencia también se puede codificar en el argumento de color. Son solo dos números hexadecimales más que codifican una transparencia entre 0 (completamente transparente) y 255 (totalmente visible). Una vez escribí esta función para agregar transparencia a un vector de color, ¿quizás es útil aquí?

addTrans <- function(color,trans) { # This function adds transparancy to a color. # Define transparancy with an integer between 0 and 255 # 0 being fully transparant and 255 being fully visable # Works with either color and trans a vector of equal length, # or one of the two of length 1. if (length(color)!=length(trans)&!any(c(length(color),length(trans))==1)) stop("Vector lengths not correct") if (length(color)==1 & length(trans)>1) color <- rep(color,length(trans)) if (length(trans)==1 & length(color)>1) trans <- rep(trans,length(color)) num2hex <- function(x) { hex <- unlist(strsplit("0123456789ABCDEF",split="")) return(paste(hex[(x-x%%16)/16+1],hex[x%%16+1],sep="")) } rgb <- rbind(col2rgb(color),trans) res <- paste("#",apply(apply(rgb,2,num2hex),2,paste,collapse=""),sep="") return(res) }

Algunos ejemplos:

cols <- sample(c("red","green","pink"),100,TRUE) # Fully visable: plot(rnorm(100),rnorm(100),col=cols,pch=16,cex=4) # Somewhat transparant: plot(rnorm(100),rnorm(100),col=addTrans(cols,200),pch=16,cex=4) # Very transparant: plot(rnorm(100),rnorm(100),col=addTrans(cols,100),pch=16,cex=4)


Si decide usar ggplot2 , puede establecer la transparencia de los puntos de superposición utilizando el argumento alpha .

p.ej

library(ggplot2) ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 1/40)


Si está utilizando los códigos hexadecimales, puede agregar dos dígitos más al final del código para representar el canal alfa:

Por ejemplo, media transparencia roja:

plot(1:100, main="Example of Plot With Transparency") lines(1:100 + sin(1:100*2*pi/(20)), col=''#FF000088'', lwd=4) mtext("use `col=''#FF000088''` for the lines() function")