Y a-t-il un moyen de rendre les points de tracé dans scatterplot plus transparents dans R?

j'ai une matrice de 3 colonnes; les tracés sont faits par des points basés sur les valeurs de la colonne 1 et de la colonne 2, mais colorés basés sur la colonne 2 (6 groupes différents). Je peux tracer avec succès tous les points, cependant, le dernier groupe de parcelles (groupe 6) qui a été assigné la couleur Pourpre, masque les parcelles des autres groupes. Y a-t-il un moyen de rendre l'intrigue plus transparente?

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) 
44
demandé sur mnel 2012-10-21 10:58:04

5 réponses

sinon, vous avez une fonction alpha dans le paquet scales dans laquelle vous pouvez directement saisir votre vecteur de couleurs (même si elles sont des 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%.
65
répondu plannapus 2018-05-01 10:51:10

Lors de la création des couleurs, vous pouvez utiliser rgb et définissez sa alpha argument:

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

consultez ?rgb pour plus de détails.

32
répondu sgibb 2018-05-01 11:02:25

la transparence peut aussi être codée dans l'argument couleur. Il ne s'agit que de deux nombres hexadécimaux supplémentaires codant une transparence entre 0 (entièrement transparent) et 255 (entièrement visible). J'ai écrit une fois cette fonction pour ajouter de la transparence à un vecteur de couleur, peut-être qu'il est 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)
15
répondu Sacha Epskamp 2012-10-21 08:21:52

Si vous décidez d'utiliser ggplot2, Vous pouvez définir la transparence des points qui se chevauchent en utilisant le alpha argument.

e.g.

library(ggplot2)
ggplot(diamonds, aes(carat, price)) + geom_point(alpha = 1/40)
10
répondu Maiasaura 2012-10-21 07:44:30

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

E. G. rouge demi-transparent:

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

6
répondu Max Candocia 2017-09-14 04:18:34