Is it possible to display custom image (say png format) as geom_point in 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")) +
Gives error:
Don't know how to automatically pick scale for object of type proto/environment. Defaulting to continuous Error: Aesthetics must either be length one, or the same length as the dataProblems:(annotation_raster(conv_pic, xmin = 0, ymin = 0, xmax = 5, ymax = 5))
The point geom is used to create scatterplots, and doesn't quite seem to be designed to do what you need, ie, display custom images. However, a similar question was answered here, which indicates that the problem can be solved in the following steps:
(1) Read the custom images you want to display,
(2) Render raster objects at the given location, size, and orientation using the rasterGrob()
function,
(3) Use a plotting function such as qplot()
,
(4) Use a geom such as annotation_custom()
for use as static annotations specifying the crude adjustments for x and y limits as mentioned by user20650.
Using the code below, I could get two custom images img1.png and img2.png positioned at the given xmin, xmax, ymin, and ymax.
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With