基于ggplot2按震级设置geom_point的颜色与透明度样式
问题描述
参考地震可视化案例创建地震时序图,现有数据集示例如下:
head(df) |Date |Time.UTC|Latitude|Longitude|Depth|Depth.Type|Magnitude.Type|Magnitude|Region.Name |Last.Update |Eqid |X |color | |----------|--------|--------|---------|-----|----------|--------------|---------|---------------------------|----------------|-------|---|-------| |2023-02-10|06:11:56|-0.13 |123.12 |137 | | M |2.5 |SULAWESI, INDONESIA |2023-02-10 06:20|1221400| |#C4C4C4| |2023-02-10|06:00:14|-1.79 |100.42 |27 | | M |2.9 |SOUTHERN SUMATRA, INDONESIA|2023-02-10 06:10|1221398| |#C4C4C4| |2023-02-10|05:59:27|-1.31 |120.44 |10 | | M |2.7 |SULAWESI, INDONESIA |2023-02-10 06:05|1221396| |#C4C4C4| |2023-02-10|05:26:25|-6.14 |104.72 |35 | | M |3.9 |SUNDA STRAIT, INDONESIA |2023-02-10 05:35|1221388| |#C4C4C4| |2023-02-10|05:10:06|-8.08 |117.78 |18 | | M |2.8 |SUMBAWA REGION, INDONESIA |2023-02-10 05:15|1221377| |#C4C4C4| |2023-02-10|04:55:01|0.99 |98.06 |25 | | M |3.3 |NIAS REGION, INDONESIA |2023-02-10 05:05|1221370| |#C4C4C4|
使用初始代码绘制:
ggplot(df,aes(Date, Magnitude)) + geom_point(data = df %>% filter(Magnitude > 5), alpha = 0.9, size = 1.7, shape = 16, stroke = 0, color = "#264653")+ geom_point(aes(color = Magnitude), data = df %>% filter(Magnitude <= 5), alpha = 1/20, size = 1.7, shape = 16, stroke = 0)
得到的图中,震级≤5的点未按需求呈现灰色+震级越高透明度越高的效果;尝试添加scale_color_gradient(low=alpha("#BFBFBF",0),high = alpha("#6B6B6B",0.9))后,仍未实现预期的透明度渐变。
预期效果:
- 震级>5的点:纯色
#264653,透明度0.9 - 震级≤5的点:灰色系,且透明度随震级升高而提升(震级越高越明显)
解决方案
问题出在你把透明度绑定到了颜色参数里,同时又给震级≤5的点设置了固定alpha值,这会覆盖颜色中的透明度设置。正确的做法是把alpha直接映射到Magnitude,同时固定颜色为灰色:
library(ggplot2) library(dplyr) ggplot(df,aes(Date, Magnitude)) + # 绘制震级>5的纯色点 geom_point(data = df %>% filter(Magnitude > 5), alpha = 0.9, size = 1.7, shape = 16, stroke = 0, color = "#264653")+ # 绘制震级≤5的灰色渐变透明度点 geom_point(aes(alpha = Magnitude), data = df %>% filter(Magnitude <= 5), size = 1.7, shape = 16, stroke = 0, color = "#808080") + # 固定灰色 # 调整透明度渐变范围:震级越低透明度越低,越高越不透明 scale_alpha_continuous(range = c(0.1, 0.9)) + # 可选:隐藏透明度图例(如果不需要) guides(alpha = "none")
关键调整说明:
- 移除震级≤5点的
color映射,改为固定灰色#808080 - 将
alpha映射到Magnitude,通过scale_alpha_continuous设置透明度范围,实现震级越高透明度越高的效果 - 保留震级>5点的独立设置,确保其纯色显示
内容的提问来源于stack exchange,提问作者isaid-hi
相关产品推荐
相关产品推荐

