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)
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%.
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)
S'il te plait regarde ?rgb
pour plus de détails.
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)
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)
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")