Я сделал сюжет с 3 миллионами очков и сохранил его как PNG. Потребовалось несколько часов, и я хотел бы избежать повторного рисования всех очков.
Как я могу создать новый график, который имеет этот PNG в качестве фона?
Я сделал сюжет с 3 миллионами очков и сохранил его как PNG. Потребовалось несколько часов, и я хотел бы избежать повторного рисования всех очков.
Как я могу создать новый график, который имеет этот PNG в качестве фона?
Попробуйте следующее:
library(png)
#Replace the directory and file information with your info
ima <- readPNG("C:\\Documents and Settings\\Bill\\Data\\R\\Data\\Images\\sun.png")
#Set up the plot area
plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y")
#Get the plot information so the image will fill the plot box, and draw it
lim <- par()
rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
grid()
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="white")
Ниже приведен график.
В то время как ответ @bill_080 отвечает на ваш вопрос, действительно ли это то, что вы хотите? Если вы хотите сделать это, вам придется тщательно выровнять свои системы координат. См. Houston Crime Map, как это можно сделать с помощью ggplot2.
Для вашей проблемы мне кажется, что может быть более простое решение: бининг, т.е. ограничение 2d гистограмм.
> df <- data.frame (x = rnorm (1e6), y = rnorm (1e6))
> system.time (plot (df))
User System verstrichen
54.468 0.044 54.658
> library (hexbin)
> system.time (binned <- hexbin (df, xbins=200))
User System verstrichen
0.252 0.012 0.266
> system.time (plot (binned))
User System verstrichen
0.704 0.040 0.784
hexbin работает непосредственно с решеткой и ggplot2, но центральные координаты бункеров находятся в [email protected]
и [email protected]
, поэтому вы можете также построить результат в базовой графике. С большим количеством бункеров вы получаете быструю версию своего исходного сюжета:
> system.time (plot ([email protected], [email protected], pch = 20, cex=0.4))
User System verstrichen
0.780 0.004 0.786
но вы можете легко получить цвета, кодирующие плотность:
> plot ([email protected], [email protected], pch = 20, cex=0.4, col = as.character (col))
> col <- cut ([email protected], 20)
> levels (col) <- grey.colors (20, start=0.9, end = 0)
> plot ([email protected], [email protected], pch = 20, cex=0.4, col = as.character (col))