una - Mostrar imagen personalizada como geom_point
seo imagenes wordpress (3)
DL Miller proporcionó otra solución usando
ggproto()
.
https://github.com/dill/emoGG
library(ggplot2)
library(grid)
library(EBImage)
img <- readImage(system.file("img", "Rlogo.png", package = "png"))
RlogoGrob <- function(x, y, size, img) {
rasterGrob(x = x, y = y, image = img, default.units = "native", height = size,
width = size)
}
GeomRlogo <- ggproto("GeomRlogo", Geom, draw_panel = function(data, panel_scales,
coord, img, na.rm = FALSE) {
coords <- coord$transform(data, panel_scales)
ggplot2:::ggname("geom_Rlogo", RlogoGrob(coords$x, coords$y, coords$size,
img))
}, non_missing_aes = c("Rlogo", "size"), required_aes = c("x", "y"), default_aes = aes(size = 0.05),
icon = function(.) {
}, desc_params = list(), seealso = list(geom_point = GeomPoint$desc),
examples = function(.) {
})
geom_Rlogo <- function(mapping = NULL, data = NULL, stat = "identity",
position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE,
...) {
layer(data = data, mapping = mapping, stat = stat, geom = GeomRlogo,
position = position, show.legend = show.legend, inherit.aes = inherit.aes,
params = list(na.rm = na.rm, img = img, ...))
}
ggplot(mtcars, aes(wt, mpg))+geom_Rlogo()
¿Es posible mostrar una imagen personalizada (digamos formato png) como geom_point en R ggplot?
library(png)
pic1 <- readPNG("pic1.png")
png("Heatmap.png", units="px", width=3200, height=3200, res=300)
ggplot(data_frame, aes(medium, day, fill = Transactions)) +
geom_tile(colour="white") +
facet_grid(dime3_year~dime3_month) +
scale_fill_gradient(high="blue",low="white") +
theme_bw() +
geom_point(aes(dime3_channel, day, size=Conv,alpha=Conv,image=(annotation_raster(pic1,xmin=0,ymin=0,xmax=5,ymax=5)),color="firebrick")) +
Da error:
No sé cómo elegir automáticamente la escala para un objeto de tipo proto / ambiente. Error predeterminado a continuo: la estética debe ser de longitud uno o la misma longitud que los problemas de datos: (annotation_raster (conv_pic, xmin = 0, ymin = 0, xmax = 5, ymax = 5))
El punto geom se usa para crear diagramas de dispersión, y no parece estar diseñado para hacer lo que necesita, es decir, mostrar imágenes personalizadas. Sin embargo, here se respondió una pregunta similar, que indica que el problema se puede resolver en los siguientes pasos:
(1) Lea las imágenes personalizadas que desea mostrar,
(2) Renderice objetos ráster en la ubicación, tamaño y orientación
rasterGrob()
usando la función
rasterGrob()
,
(3) Use una función de trazado como
qplot()
,
(4) Use una geom como
annotation_custom()
para usar como anotaciones estáticas que especifiquen los ajustes brutos para los límites xey indicados por el usuario 20650.
Usando el siguiente código, podría obtener dos imágenes personalizadas img1.png e img2.png posicionadas en los valores xmin, xmax, ymin e ymax dados.
library(png)
library(ggplot2)
library(gridGraphics)
setwd("c:/MyFolder/")
img1 <- readPNG("img1.png")
img2 <- readPNG("img2.png")
g1 <- rasterGrob(img1, interpolate=FALSE)
g2 <- rasterGrob(img2, interpolate=FALSE)
qplot(1:10, 1:10, geom="blank") +
annotation_custom(g1, xmin=1, xmax=3, ymin=1, ymax=3) +
annotation_custom(g2, xmin=7, xmax=9, ymin=7, ymax=9) +
geom_point()
Esto no hace exactamente lo que quieres dentro de
geom_point
pero quizás sugiere una alternativa rápida.
Sin embargo, incluye un ajuste bastante crudo para los límites
x
e
y
.
library(png)
library(ggplot2)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
ggplot(mtcars, aes(mpg, wt)) +
geom_blank() +
mapply(function(xx, yy)
annotation_raster(img, xmin=xx-1, xmax=xx+1, ymin=yy-0.2, ymax=yy+0.2),
mtcars$mpg, mtcars$wt)
Para las facetas, vea
la respuesta de Kohske
sobre cómo alterar la función
mapply
.
EDITAR
Creo que esto en realidad se ve mejor usando
annotation_custom()
, como en la respuesta de Deb.
A continuación, permite recorrer todos los puntos, en lugar de tener que usar llamadas individuales de anotación_personalizadas.
El ligero cambio desde arriba es que el grob parece necesitar un cambio de nombre (
comentario del enlace
)
g <- rasterGrob(img, interpolate=FALSE)
ggplot(mtcars, aes(mpg, wt)) +
geom_blank() +
mapply(function(xx, yy, ii) {
g$name <- ii
annotation_custom(g, xmin=xx-1, xmax=xx+1, ymin=yy-0.2, ymax=yy+0.2)},
mtcars$mpg, mtcars$wt, seq_len(nrow(mtcars)))