web-dev-qa-db-fra.com

Est-il possible de rendre les points de tracé dans le diagramme de dispersion plus transparents dans R?

J'ai une matrice de 3 colonnes; les graphiques sont créés par points basés sur les valeurs des colonnes 1 et 2, mais colorés sur la base de la colonne 2 (6 groupes différents). Je peux réussir à tracer tous les points, cependant, le dernier groupe de tracés (groupe 6) auquel la couleur pourpre a été attribuée masque les tracés des autres groupes. Est-il possible de rendre les points de l'intrigue plus transparents?

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) 
54
Steve

Sinon, vous avez la fonction alpha dans le package scales dans laquelle vous pouvez directement saisir votre vecteur de couleurs (même s’il s’agit de facteurs comme dans votre exemple):

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%.
79
plannapus

Lors de la création des couleurs, vous pouvez utiliser rgb et définir son argument 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)

enter image description here

S'il te plait regarde ?rgb pour plus de détails.

41
sgibb

La transparence peut également être codée dans l'argument de couleur. Ce ne sont que deux autres nombres hexadécimaux codant une transparence comprise entre 0 (totalement transparent) et 255 (entièrement visible). Une fois, j’ai écrit cette fonction pour ajouter de la transparence à un vecteur de couleur, c’est peut-être utile ici?

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

Quelques exemples:

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)
16
Sacha Epskamp

Si vous décidez d'utiliser ggplot2, vous pouvez définir la transparence des points qui se chevauchent à l’aide de l’argument alpha.

par exemple.

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

Si vous utilisez les codes hexadécimaux, vous pouvez ajouter deux autres chiffres à la fin du code pour représenter le canal alpha:

Par exemple. demi-transparence rouge:

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

example plot of color with transparency

10
Max Candocia