Soru Scatterplotta arsa noktaları R'de daha saydam hale getirmenin herhangi bir yolu var mı?


3 sütun matrisim var; parseller sütun 1 ve sütun 2 değerlerine dayanan noktalarla yapılır, ancak sütun 2'ye (6 farklı grup) dayalı olarak renklendirilir. Bütün noktaları başarıyla çizebilirim, ancak mor renk verilen son arsa grubu (grup 6) diğer grupların grafiklerini çiziyor. Arsa noktalarını daha şeffaf hale getirmenin bir yolu var mı?

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
2017-10-21 06:58


Menşei




Cevaplar:


Aksi takdirde, fonksiyonunuz var alpha pakette scales Renklerin vektörünü doğrudan girebileceğiniz (örneğinizdeki faktörler olsa bile):

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
2017-10-21 08:18



"% 50 görünürlük için" diyebilirim. Örnek olarak, kullanıcının alfa parametresinin ne anlama geldiğini hemen bilmesi için% 50'yi kullanmamak daha iyi olabilirdi. - Diego F Medina
@DiegoFMedina Bu aslında kötü bir fikir değil, teşekkürler, en kısa zamanda değiştireceğim. - plannapus


Renkleri oluştururken kullanabilirsiniz rgb ve onun alpha argüman:

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

Bakınız ?rgb detaylar için.


32
2017-10-21 07:15



Görünüşe göre sadece rgb ayarlarını tek bir nokta grubuna ekleyebilirim. Bunu 1'den fazla gruba nasıl uygularım? - Steve
ör .: iki farklı renk: points((1:10)+0.05, col=rgb(c(0, 0), c(1, 0), c(0, 1), rep(0.5, 2)), pch=16) (6 farklı renk için aynı yaklaşımı kullanabilirsiniz) - sgibb


Şeffaflık, renk argümanında da kodlanabilir. Bu, 0 (tamamen şeffaf) ve 255 (tam olarak görünür) arasında bir saydamlığı kodlayan sadece iki daha onaltı sayıdır. Bir kez bir renk vektörüne saydamlık eklemek için bu işlevi yazdım, belki burada yararlı olur mu?

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

Bazı örnekler:

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
2017-10-21 08:21



bence ?adjustcolor bazında R ( grDevices paket), sizinki gibi tamamen vektörize edilmemiş olsa da, buna benzer bir şey yapar. - Ben Bolker
Selam Sacha! Cevap :-) "kaçırmak" için üzgünüm. Hızlı bir sorum var: bir yolu var mı semPlot ve / veya qgraph [Bu arada mükemmel paketler!] etiketleri (yani yükleri) eğrilerin merkezinden uzağa yerleştirmek için? Eğriler boyunca değil, "dikey" bir anlamda. Düşük seviye LaTeX rotasına gitmeyi tercih etmem. Teşekkür ederim! - Aleksandr Blekh
Teşekkürler! Şu anda, yalnızca etiketin çizildiği kenarda kontrol etmek için edge.label.pozition argümanını kullanabilirsiniz. Onu uygulamaya çalışacağım! - Sacha Epskamp


Kullanmaya karar verirseniz ggplot2üst üste binen noktaların saydamlığını alpha argüman.

Örneğin.

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

10
2017-10-21 07:44





Altıgen kodları kullanıyorsanız, alfa kanalı temsil etmek için kodun sonuna iki basamak daha ekleyebilirsiniz:

Örneğin. yarım şeffaflık kırmızı:

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


5
2017-09-14 04:18