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

如何解决R ggplot2绘图Discrete value错误及intensity分箱设置问题

问题原因

  • 报错Discrete value supplied to continuous scale的根本原因:cut()函数返回的zakresy是离散因子类型,但你调用的scale_color_gradientn()是专为连续数值设计的颜色映射函数,类型不匹配触发报错。
  • 0值返回NA的原因:你当前用seq(0, 1200, length.out=9)生成的分箱断点,默认左开右闭规则下第一个区间不包含等于0的情况,所以0会被识别为超出范围返回NA。

解决代码

按照你要求的分箱规则自定义断点即可,同时调整颜色映射函数匹配离散分箱:

library(dplyr)
library(ggplot2)

df1 <- data.frame(
  time = as.POSIXct(c("2021-05-04 01:00:00", "2021-05-04 02:00:00",
                      "2021-05-04 03:00:00", "2021-05-04 04:00:00", "2021-05-04 05:00:00",
                      "2021-05-04 06:00:00", "2021-05-04 07:00:00", "2021-05-04 08:00:00")),
  lng = c(15.363, 15.363, 15.363, 15.363 , 15.363, 15.363, 15.363, 15.363),
  lat = c(51.232, 51.232, 51.232, 51.232, 51.232, 51.232, 51.232, 51.232),
  name = c('aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh'),
  intensity = c(0, 7, 20, 200, 500, 500, 600, 800)
)

# 自定义分箱断点,刚好匹配“等于0、(0;100]、(100;200]……(1100;1200]”规则
przedzialy <- c(-1, 0, seq(100, 1200, by = 100))
# 自定义分箱显示标签
etykiety <- c("0", "(0,100]", "(100,200]", "(200,300]", "(300,400]", "(400,500]", 
              "(500,600]", "(600,700]", "(700,800]", "(800,900]", "(900,1000]", 
              "(1000,1100]", "(1100,1200]")

df1_new <- df1 %>%
  mutate(zakresy = cut(intensity, breaks = przedzialy, labels = etykiety))

paleta_rgb <- c("#41786E", "#5AA03C", "#BED200", "#FFFA78", "#FCDC00",
                "#F5BE00", "#F0A04B", "#E68246", "#E15F32", "#D2412D",
                "#C02E2A", "#B01A27", "#9F0A24")

ggplot() +
  geom_point(data = df1_new, aes(lng, lat, color = zakresy), alpha = 0.5, show.legend = TRUE, size = 2) +
  # 改用离散颜色映射函数匹配因子类型的分箱字段
  scale_color_manual(values = paleta_rgb, name = "强度区间") +
  coord_map() +
  theme_void()

如果你不需要显式生成分箱字段,只是要连续颜色按100间隔显示刻度,也可以用更简化的连续映射写法:

ggplot() +
  geom_point(data = df1, aes(lng, lat, color = intensity), alpha = 0.5, size = 2) +
  scale_color_gradientn(colors = paleta_rgb, breaks = seq(0, 1200, 100), limits = c(0,1200)) +
  coord_map() +
  theme_void()

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:12:02