r - 如何改变ggplot中椭圆的半透明度?
问题描述
我正在 ggplot2 中制作一个包含 100 个不同椭圆的图。我希望绘图上的椭圆/多边形稍微半透明,这样线条最多的区域就会变暗,而一个椭圆的区域会很暗。
我想要的不透明度与我目前得到的不透明度
但是,无论我改成什么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")
为帮助干杯!
解决方案
问题是您正在指定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)
真的,没有比这更美丽的画面了。如果我们适用于此alpha=
,您会看到只有填充受到影响:
p + geom_polygon(aes(color=id), size=1.5, alpha=0.2)
那么我们该如何解决呢?好吧,您需要以另一种方式指定 alpha,即使用alpha(): the function
. 您可能认为可以在内部使用aes()
并直接应用于color=
美学……但您错了。 aes(color=alpha(id, 0.2))
将不起作用,因为alpha()
期望发送实际颜色名称,而不是像ggplot2
. 但是,您可以指定alpha()
within 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))
可能很难从中看出,但线条的颜色是透明的。您可以在没有 alpha 设置的情况下与相同的颜色进行比较:
p + geom_polygon(aes(color=id), size=1.5, alpha=0.2) +
scale_color_manual(values=c("this"='blue', "that"='red'))
现在应该很明显,您需要更改scale_color_manual()
线路。我认为这应该有效:
scale_color_manual(values = alpha(col_list, 0.2))
推荐阅读
- javascript - 我想按照图片中的描述重新格式化 JSON 数组
- spring - 如何让spring boot从kubernetes的挂载卷中加载属性?
- kubernetes - Kubernetes 中工作节点之间的数据如何流动?
- azure-cli - 使 az cli synapse 恢复/暂停容错
- ruby-on-rails - devise_token_auth ruby on rails 禁用密码验证
- node.js - 如何编写 Postman 测试以使用 Newman 将响应正文与外部 JSON/CSV 文件进行比较?
- python-3.x - 在 jupyter 中找不到模块(folium)
- php - Laravel 中的 3 个表关系
- javascript - 发布请求不起作用,声称正文数据不存在
- python - 尝试使用 conda 安装 unrar 时出现 PackagesNotFoundError