使用 ggplot 创建具有二维值的等值线(多边形)地图
Creating a choropleth (polygon) map with 2 dimensional values using ggplot
我想创建一个可视化二维值的等值线图(=颜色根据有序对 (v1, v2)
填充多边形,其中 v1
和 v2
是有序因子)。
下面是结果的示例:
我认为带有二维的颜色矩阵图例清楚地说明了我想要实现的目标。
我想使用 ggplot2::geom_polygon
来实现这个。
最小示例:
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3"))
values <- data.frame(
id = ids,
v1 = factor(c("Hi","Med","Med","Hi","Lo","Lo"),
levels=c("Lo", "Med", "Hi"), ordered=TRUE),
v2 = factor(c("Hi","Lo","Lo","Med","Med","Hi"),
levels=c("Lo", "Med", "Hi"), ordered=TRUE))
positions <- data.frame(
id = rep(ids, each = 4),
x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3,
0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5,
2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2))
datapoly <- merge(values, positions, by=c("id"))
我想按照上面的示例将以下两张地图组合成一张。 polgons 的颜色填充应该根据有序对 (v1, v2)
当然我需要一个颜色矩阵图例。
library("ggplot2")
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1, group=id))
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v2, group=id))
如何 interaction(v1, v2)
并在生成的交互上映射单个比例?
# using your inputs
values$v1_2 <- interaction(values$v1, values$v2)
...
datapoly <- merge(values, positions, by=c("id"))
library(ggplot2)
library(scales)
library(RColorBrewer)
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1_2, group=id)) +
scale_fill_brewer(palette= "Blues")
或者使用上面评论中链接到的解决方案@gregor。
这里的聚会有点晚了,但是,为了以后遇到这个问题的任何人的利益,https://github.com/wmurphyrd/colorplaner seems to do exactly what you want. The second example in the usage 部分甚至给出了在地图中着色的示例。
我想创建一个可视化二维值的等值线图(=颜色根据有序对 (v1, v2)
填充多边形,其中 v1
和 v2
是有序因子)。
下面是结果的示例:
我认为带有二维的颜色矩阵图例清楚地说明了我想要实现的目标。
我想使用 ggplot2::geom_polygon
来实现这个。
最小示例:
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3"))
values <- data.frame(
id = ids,
v1 = factor(c("Hi","Med","Med","Hi","Lo","Lo"),
levels=c("Lo", "Med", "Hi"), ordered=TRUE),
v2 = factor(c("Hi","Lo","Lo","Med","Med","Hi"),
levels=c("Lo", "Med", "Hi"), ordered=TRUE))
positions <- data.frame(
id = rep(ids, each = 4),
x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3,
0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5,
2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2))
datapoly <- merge(values, positions, by=c("id"))
我想按照上面的示例将以下两张地图组合成一张。 polgons 的颜色填充应该根据有序对 (v1, v2)
当然我需要一个颜色矩阵图例。
library("ggplot2")
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1, group=id))
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v2, group=id))
如何 interaction(v1, v2)
并在生成的交互上映射单个比例?
# using your inputs
values$v1_2 <- interaction(values$v1, values$v2)
...
datapoly <- merge(values, positions, by=c("id"))
library(ggplot2)
library(scales)
library(RColorBrewer)
ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=v1_2, group=id)) +
scale_fill_brewer(palette= "Blues")
或者使用上面评论中链接到的解决方案@gregor。
这里的聚会有点晚了,但是,为了以后遇到这个问题的任何人的利益,https://github.com/wmurphyrd/colorplaner seems to do exactly what you want. The second example in the usage 部分甚至给出了在地图中着色的示例。