Как добавить альфа-цветовую шкалу в ggplot2 - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь использовать шкалу для создания точек с разными цветами альфа

Мои данные. Кадры:

   df2$membership
  [1] 0.34185026 0.15610992 0.04991413 0.00000000 0.52687792 0.16631913 0.11915588 0.26531666 0.16631913 0.34312613 0.39910748 0.00000000
  [13] 0.31770686 0.37701944 0.19777656 0.00000000 0.28141323 0.38329395 0.00000000 0.45098905 0.15583159 0.00000000 0.15610992 0.00000000
  [25] 0.45297710 0.38409023 0.38329395 0.06272793 0.28141323

  df$cluster+1
  [1] 3 2 3 1 3 3 3 3 3 3 3 3 3 3 3 2 3 3 1 3 3 1 2 1 3 3 3 2 3

  df
  V1         V2
  1   -60.950322   3.268223
  2   120.989186 -18.171861
  3  -100.891471 -54.566570
  4   123.853486 -31.076373
  5    47.068591  21.517879
  6   -96.289311 -32.327825
  7   -55.133477 -23.899109
  etc

Я сделал это с помощью следующего кода с plot ()

   plot(df, col=df2$cluster+1, pch=21, cex = 2) 

   colors <- mapply(function(col, i) adjustcolor(col, alpha.f = df2$membership_prob[i]), 
             palette()[df2$cluster+1], seq_along(df2$cluster))

   points(df, col=colors, pch=20, cex = 2) +
   text(df, labels = rownames(df), pos = 4)

Что дает мне:

Points with differing alpha levels

Но у меня проблемы с этим в ggplot2, потому что я уже делаю все остальные мои графики в ggplot2, и эстетика сильно отличается.

Мне нужен способ использования непрерывной шкалы (df2 $ members_prob) в качестве альфа-уровня для моей паллеты, который представляет собой df2 $ cluster + 1.

Воспроизводимый пример того, что мне нужно с ggplot (альфа-уровни в цвете):

   library("dbscan")
   data("moons")
   cl <- hdbscan(moons, minPts = 5)
   plot(moons, col=cl$cluster+1, pch=21)
   colors <- mapply(function(col, i) adjustcolor(col, alpha.f = cl$membership_prob[i]), 
               palette()[cl$cluster+1], seq_along(cl$cluster))
   points(moons, col=colors, pch=20)

Ответы [ 2 ]

1 голос
/ 25 апреля 2019
library(tidyverse)
moons %>% 
  bind_cols(membership_prob = cl$membership_prob) %>%
  bind_cols(cluster = as.factor(cl$cluster)) %>%  # to make discrete var
  ggplot(aes(X,Y, color = cluster, alpha = membership_prob)) +
  geom_point(size = 5, shape = 20)

enter image description here

0 голосов
/ 25 апреля 2019

Прочитав ответ Джона Спринга, я пришел с решением в ggplot, которое не влияет на альфа-метку:

   library(ggplot2); 
   ggplot(df, aes_string("V1", "V2", color = "cluster+1")) + 
   geom_point(shape = 21, size = 4,fill = NA) +  #solid points with no fill
   geom_point(shape = 20, size = 3, aes_string(x="V1", y="V2", color="cluster+1", alpha = "a$V1")) #fill with alpha values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...