如何使用图像作为图例键字形?
How to use an image as a legend key glyph?
我正在用图标在 ggplot 中绘制散点图,但我一直坚持使用图标制作图例。
在 ggimage 文档中有一个名为 "draw_key_image" 的函数,但我不太了解如何使用它或所需的参数。
文档说 "data = A single row data frame containing the scaled aesthetics to display in this key" 但这对我一点帮助都没有!
https://www.rdocumentation.org/packages/ggimage/versions/0.2.7/topics/draw_key
##Hopefully reproducible code with example data
##Icons downloaded from https://labs.mapbox.com/maki-icons/
library(ggplot2)
library(ggimage)
library(rsvg)
Activity<-"Walk"
x = -2
y = 2.5
icon<-".\mapbox-maki-a6d16d4\icons\shoe-15.svg"
test_data<-data.frame( Activity, x, y, icon)
p_test<-ggplot(data = test_data,
aes(x = x,
y = y))+
geom_image(aes(image=icon), size=.03)
p_test
谁能帮我添加一个图标和标签为"Walk"的图例?
非常感谢,乔
这个 draw_key 函数应该可以工作 'under the hood'。请参阅文档
Each geom has an associated function that draws the key when the geom needs to be displayed in a legend. These functions are called
draw_key_*(), where * stands for the name of the respective key glyph.
The key glyphs can be customized for individual geoms by providing a
geom with the key_glyph argument (see layer() or examples below.)
我敢说,ggimage
在这方面可能值得更多发展。
https://github.com/GuangchuangYu/ggimage/issues/18 显示目前仅支持三种类型的图例字形,您可以通过更改选项来激活它们(请参见下面的代码)。还可以更改底层 draw_key 函数,而不是加载 R 图像,您可以加载图像。它需要是 png,所以首先你需要将它转换为 png。
You can find the source code which I modified here
缺点是目前只接受一张图片。为了将多个图像映射到您的 geom 美学,您可以从大师 Baptiste 创作的 'minimalist' geom 中找到灵感。
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 package (v0.3.0)
于 2020 年 4 月 20 日创建
有用的线程:
我正在用图标在 ggplot 中绘制散点图,但我一直坚持使用图标制作图例。
在 ggimage 文档中有一个名为 "draw_key_image" 的函数,但我不太了解如何使用它或所需的参数。
文档说 "data = A single row data frame containing the scaled aesthetics to display in this key" 但这对我一点帮助都没有!
https://www.rdocumentation.org/packages/ggimage/versions/0.2.7/topics/draw_key
##Hopefully reproducible code with example data
##Icons downloaded from https://labs.mapbox.com/maki-icons/
library(ggplot2)
library(ggimage)
library(rsvg)
Activity<-"Walk"
x = -2
y = 2.5
icon<-".\mapbox-maki-a6d16d4\icons\shoe-15.svg"
test_data<-data.frame( Activity, x, y, icon)
p_test<-ggplot(data = test_data,
aes(x = x,
y = y))+
geom_image(aes(image=icon), size=.03)
p_test
谁能帮我添加一个图标和标签为"Walk"的图例?
非常感谢,乔
这个 draw_key 函数应该可以工作 'under the hood'。请参阅文档
Each geom has an associated function that draws the key when the geom needs to be displayed in a legend. These functions are called draw_key_*(), where * stands for the name of the respective key glyph. The key glyphs can be customized for individual geoms by providing a geom with the key_glyph argument (see layer() or examples below.)
我敢说,ggimage
在这方面可能值得更多发展。
https://github.com/GuangchuangYu/ggimage/issues/18 显示目前仅支持三种类型的图例字形,您可以通过更改选项来激活它们(请参见下面的代码)。还可以更改底层 draw_key 函数,而不是加载 R 图像,您可以加载图像。它需要是 png,所以首先你需要将它转换为 png。
You can find the source code which I modified here
缺点是目前只接受一张图片。为了将多个图像映射到您的 geom 美学,您可以从大师 Baptiste 创作的 'minimalist' geom 中找到灵感。
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 package (v0.3.0)
于 2020 年 4 月 20 日创建有用的线程: