Подтвердить что ты не робот

Любой способ сделать точки графика в плане рассеяния более прозрачными в R?

У меня есть матрица из 3 столбцов; графики производятся точками, основанными на значениях столбца 1 и столбца 2, но окрашены на основе столбца 2 (6 разных групп). Я могу успешно построить все точки, однако, последнюю группу сюжетов (группа 6), которой был назначен фиолетовый цвет, маскирует графики других групп. Есть ли способ сделать точки сюжета более прозрачными?

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) 
4b9b3361

Ответ 1

В противном случае у вас есть функция alpha в пакете scales, в которой вы можете напрямую вводить свой вектор цветов (даже если это факторы, как в вашем примере):

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.5), pch=16) 
# For an alpha of 0.5, i. e. a transparency of 50%.

Ответ 2

Вы имеете в виду что-то вроде этого?

plot(1:10, col=rgb(1, 0, 0, 0.5), pch=16)
points((1:10)+0.05, col=rgb(0, 0, 1, 0.5), pch=16)

Подробнее см. ?rgb.

Ответ 3

Прозрачность также может быть закодирована в цветовом аргументе. Это всего лишь два шестнадцатеричных числа, кодирующих прозрачность между 0 (полностью прозрачным) и 255 (полностью видимыми). Я однажды написал эту функцию, чтобы добавить прозрачность к цветному вектору, может быть, это полезно здесь?

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

Некоторые примеры:

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)

Ответ 4

Если вы решили использовать ggplot2, вы можете установить прозрачность перекрывающихся точек с помощью аргумента alpha.

например.

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

Ответ 5

Если вы используете шестнадцатеричные коды, вы можете добавить еще две цифры в конце кода для представления альфа-канала:

например. полупрозрачность красного цвета:

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

пример графика цвета с прозрачностью