这个 draw_key 函数应该在“幕后”工作。查看文档
每个几何图形都有一个关联函数,当几何图形需要在图例中显示时绘制键。这些函数称为 draw_key_*(),其中 * 代表相应键字形的名称。通过为 geom 提供 key_glyph 参数(参见 layer() 或下面的示例),可以为单个 geom 自定义键字形。
我敢说,ggimage
在这方面可能值得更多的发展。
https://github.com/GuangchuangYu/ggimage/issues/18显示目前仅支持三种类型的图例字形,您可以通过更改选项来激活它们(参见下面的代码)。还可以更改底层的 draw_key 函数,而不是加载 R 图像,您可以加载图像。它需要是一个 png,所以首先你需要将它转换为 png。
你可以在这里找到我修改的源代码
缺点是它目前只接受一张图片。为了将多个图像映射到您的几何美学,您可以从大师 Baptiste 创造的“极简主义”几何中找到灵感。https://stackoverflow.com/a/36172385/7941188
library(ggplot2)
library(ggimage)
Activity<-c("Walk1", "Walk2")
x = 1:2
y = 2:3
icon<-"https://raw.githubusercontent.com/mapbox/maki/a6d16d49a967b73d9379890a7b26712b12b8daef/icons/shoe-15.svg"
bitmap <- rsvg::rsvg(icon, height = 50)
png::writePNG(bitmap, "shoe.png", dpi = 144)
test_data<-data.frame( Activity, x, y, icon)
options(ggimage.keytype = "image")
ggplot(data = test_data, aes(x = x, y = y)) +
geom_image(aes(image=icon, color = Activity), size=.03)
图标更改为 R 标志:
现在让我们修改 draw_key_image 函数。您还需要使用 geom_image 中的 key_glyph 参数调用它。
draw_key_image <- function (data, params, size) {
kt <- getOption("ggimage.keytype")
if (kt == "image") {
img <- magick::image_read("shoe.png")
grobs <- lapply(seq_along(data$colour), function(i) {
img <- ggimage:::color_image(img, data$colour[i], data$alpha[i])
grid::rasterGrob(0.5, 0.5, image = img, width = 1, height = 1)
})
class(grobs) <- "gList"
keyGrob <- ggplot2:::ggname("image_key", grid::gTree(children = grobs))
}
return(keyGrob)
}
ggplot(data = test_data, aes(x = x, y = y)) +
geom_image(aes(image=icon, color = Activity), size=.03,
key_glyph = draw_key_image) # you need to add this argument
由reprex 包于 2020-04-20 创建(v0.3.0)
有用的线程:将 svg 转换为 png