【发布时间】:2023-04-07 21:27:01
【问题描述】:
我使用ggmap 包,我想根据值而不是记录数绘制热图。
在其他有关相同主题的帖子的帮助下,我可以接近这个目标,但情节并不是真正的热图。
我确切地说它不是 Heatmap plot by value using ggmap 和 ggmap Heatmap with value 的重复,因为我不想刻画我的情节,也不想有等值线图。
这是代码和数据的摘录。
代码:
library(ggmap)
CentreCarte <- c(lon = 2.35, lat = 48.85)
Carte <- get_map(location = CentreCarte, source = "google", maptype = "terrain", zoom = 9, color = "bw")
ggmap(Carte) %+% MyData +
aes(x = lon, y = lat, z = Satisfaction) +
stat_summary2d(fun = median, alpha = 0.5)
数据:
structure(list(lon = c(2.336018, 2.336018, 2.5221629, 2.246237,
2.3259213, 2.16647, 2.1203554, 1.735384, 1.940096, 1.765638,
2.2899811, 2.165493, 2.110156, 2.378493, 2.3716529, 2.31002,
2.3827967, 2.3625879, 2.3529867, 2.3719424, 2.4270832, 2.897243,
2.656802, 2.6880829, 2.504403, 2.458625, 3.299203, 2.2785604),
lat = c(48.7022059, 48.7022059, 48.7708784, 48.589172, 48.6408416,
48.6792779, 48.8048649, 48.992181, 48.571308, 48.805027,
48.9162844, 48.990006, 48.880777, 48.997347, 49.093886, 48.796696,
48.8387005, 48.9259577, 48.891305, 48.8111854, 48.9156278,
48.928386, 48.7904005, 48.868659, 48.90852, 48.892489, 48.560149,
48.8399261), Satisfaction = c(5, 4, 1, 4, 3, 3, 2, 3, 5,
1, 4, 3, 1, 5, 3, 3, 3, 2, 3, 4, 2, 3, 3, 1, 2, 2, 5, 4)), .Names = c("lon",
"lat", "Satisfaction"), row.names = c(560L, 561L, 565L, 566L,
569L, 570L, 573L, 574L, 576L, 581L, 594L, 597L, 599L, 600L, 601L,
605L, 606L, 607L, 608L, 609L, 611L, 612L, 615L, 616L, 619L, 622L,
623L, 624L), class = "data.frame")
【问题讨论】:
-
我现在才发现你的问题。如果您使用
stat_summary_2d(),您是在要求该函数通过在其中应用一个函数来创建箱(即地图上的彩色方块)。在您的情况下,您使用median()。所以stat_summary_2d()定义了你需要多少个 bin(默认为 30),它会在每个 bin 中找到Satisfaction的中值。从这个意义上说,您在问题中的地图是热图。如果你想总结 Satisfaction 的值,你可以使用sum作为stat_summary_2d()中的一个函数。 -
感谢您的回复。但我的主要问题是我的代码显示一个“离散”地图,每个值都有一个点,而不是“连续”地图(即热图)。
-
不是因为你用的是中位数吗?如果您有少量数据,您可能会看到“离散”地图。