You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:35:22