Как изменить прозрачность эллипсов в ggplot? - PullRequest
2 голосов
/ 18 июня 2020

Я делаю график из 100 разных эллипсов в ggplot2. Я хочу, чтобы эллипсы / многоугольники на графике были слегка полупрозрачными, чтобы области с наибольшим количеством линий на них становились темнее, а области с одним эллипсом были довольно тусклыми. 1004 * vs непрозрачность, которую я сейчас получаю

Однако, независимо от того, что я меняю alpha на, похоже, это не действует? Что я делаю не так?

ggplot(data = cssibernobk, aes(iso1, iso2)) +
  scale_fill_manual(name = "Marlin Species", labels = c("Blue Marlin", "Striped Marlin"),values=c(col_list)) +
  geom_polygon(data = ellipse_dfcs,
               show.legend = FALSE,
               mapping = aes(iso1, iso2,
                             group = ellipse_dfcs$group,
                             color = factor(group),
                             fill = factor(group)), fill = NA, alpha = 0.2) + 
  scale_color_manual(values = col_list)+
  geom_point(colour="black", shape=21, size = 2, 
             aes(fill = factor(group))) + 
  ylab(expression(paste(delta^{34}, "S (\u2030)")))+ 
  xlab(expression(paste(delta^{13}, "C (\u2030)")))+ 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black")) 

Я добавил некоторые данные:

dput(cssibernobk[1:10,])
structure(list(iso1 = c(-19.0666624548854, -17.8943955612859, 
-18.9928609367509, -16.4710761874456, -18.2727144857982, -20.5069897964015, 
-20.5966996037602, -17.5454265065267, -16.4393689881177, -17.4617536511442
), iso2 = c(19.4934410976126, 19.2364832949763, 19.7701196888491, 
19.837594669008, 19.7147010622141, 20.3802264543413, 20.4655925249838, 
19.0895171633117, 19.7264242586365, 19.2537859386917), group = c(1, 
1, 1, 1, 1, 1, 1, 1, 1, 1), community = c(1, 1, 1, 1, 1, 1, 1, 
1, 1, 1)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
"data.frame"))

dput(ellipse_dfcs[1:10,])
structure(list(id = c("1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1"), iso1 = c(-15.3019878272902, -15.4740783680741, -15.6530442971316, 
-15.8381649818314, -16.0286950065133, -16.2238671740144, -16.4228955949008, 
-16.6249788519676, -16.8293032272625, -17.0350459786413), iso2 = c(20.3654052739855, 
20.44444500941, 20.5195305006846, 20.5903594050369, 20.6566465194678, 
20.718124929163, 20.7745470822651, 20.8256857866775, 20.8713351248865, 
20.9113112831188), community = c("1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1"), group = c("1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1")), row.names = c(NA, 10L), class = "data.frame")

Ура за помощь!

1 Ответ

1 голос
/ 18 июня 2020

Проблема в том, что вы указываете alpha=, но это применяется к fill=, а не к color= строки. Например, в geom_line() вы можете использовать alpha=, чтобы сделать линию прозрачной, но это не относится к geom_polygon(). Поскольку это сложно показать с использованием вашего набора, позвольте мне продемонстрировать на примере набора:

# I dunno, I'm making shapes...
d <- data.frame(id=c(rep('this',4),rep('that',4)), x=c(0,1,1,0.5,0.5,2,0.5,0.5), y=c(0,0,2,3,0.5,2,2,1))

p <- ggplot(d, aes(x,y)) + theme_bw()
p + geom_polygon(aes(color=id), size=1.5)

enter image description here

Поистине, никогда не было более красивого картина. Если мы применим к нему alpha=, вы увидите, что это влияет только на заливку:

p + geom_polygon(aes(color=id), size=1.5, alpha=0.2)

enter image description here

Итак, как мы это исправить ? Что ж, вам нужно указать альфа другим способом, то есть использовать alpha(): the function. Вы можете подумать, что можно использовать внутри aes() и применять непосредственно к color= aestheti c ... но вы ошибаетесь. aes(color=alpha(id, 0.2)) не будет работать, потому что alpha() ожидает отправки фактического имени цвета, а не имени фактора, такого как ggplot2. Однако вы можете указать alpha() в scale_color_manual(), и именно здесь мы приходим к нашему ответу:

p + geom_polygon(aes(color=id), size=1.5, alpha=0.2) +
  scale_color_manual(values=alpha(c("this"='blue', "that"='red'),0.2))

enter image description here

Это может быть С этого не видно, но цвета линий прозрачные. Вы можете сравнить с теми же цветами без настройки альфа:

p + geom_polygon(aes(color=id), size=1.5, alpha=0.2) +
  scale_color_manual(values=c("this"='blue', "that"='red'))

enter image description here

Теперь должно быть очевидно, что вам нужно изменить scale_color_manual() линия. Думаю, это должно работать:

  scale_color_manual(values = alpha(col_list, 0.2))
...