Подтвердить что ты не робот

Как рисовать с помощью png в качестве фона?

Я сделал сюжет с 3 миллионами очков и сохранил его как PNG. Потребовалось несколько часов, и я хотел бы избежать повторного рисования всех очков.

enter image description here

Как я могу создать новый график, который имеет этот PNG в качестве фона?

4b9b3361

Ответ 1

Попробуйте следующее:

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")

Ниже приведен график.

enter image description here

Ответ 2

В то время как ответ @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

enter image description here

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 

enter image description here

но вы можете легко получить цвета, кодирующие плотность:

> 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))

enter image description here