How can I do a graph similar to this (the dollar image graph)? Or what packages can I do this with? I have a (gg)plot using geom_area.
Dollar graph image
To add a picture to a plot in base R, we first need to read the picture in the appropriate format and then rasterImage function can be used. The most commonly used format for picture in R is PNG. A picture in PNG format can be added to a plot by supplying the values in the plot where we want to add the picture.
This is purely for novelty purposes, right?
In the code below, we cover up the portion of the dollar bill above the blue curve using geom_ribbon
.
library(jpeg)
library(grid)
library(ggplot2)
library(scales)
theme_set(theme_classic())
# Load image of dollar bill and convert to raster grob
download.file("https://2marks.files.wordpress.com/2013/07/george-washington-on-one-dollar-bill.jpg",
"dollar_bill.jpg")
db = readJPEG("dollar_bill.jpg")
db = rasterGrob(db, interpolate=TRUE)
# Fake data
set.seed(3)
dat = data.frame(x=1913:2009)
dat$y2 = seq(5,950, length=nrow(dat)) + rnorm(nrow(dat), 0, 5)
dat$y1 = seq(100,5,length=nrow(dat)) + c(0, -0.5, rnorm(nrow(dat) - 2, 0, 2))
ggplot(dat, aes(x, y1)) +
annotation_custom(db, xmin=1913, xmax=2009, ymin=0, ymax=100) +
geom_ribbon(aes(ymin=y1, ymax=100), fill="white") +
geom_line(size=1, colour="blue") +
geom_line(aes(y=y2/10), size=1, colour="red") +
coord_fixed(ratio=1/2.5) +
scale_y_continuous(limits=c(0,100), expand=c(0,0),
sec.axis=sec_axis(~.*10, name="Currency in Circulation\n(billions)", labels=dollar)) +
scale_x_continuous(limits=c(1913,2009), expand=c(0,0)) +
labs(x="", y="Purchasing Power\n(1913=100)") +
theme(axis.text.y.right=element_text(colour="red"),
axis.title.y.right=element_text(colour="red"),
axis.text.y=element_text(colour="blue"),
axis.title.y=element_text(colour="blue"),
axis.title.x=element_blank())
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