library(magick)
## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11

Tambahan yang relatif baru untuk paket ini adalah perangkat grafis R asli yang menghasilkan objek gambar tenung. Ini dapat digunakan seperti perangkat biasa untuk membuat plot, atau sebagai alternatif untuk membuka perangkat yang menarik ke gambar yang ada menggunakan koordinat piksel.

Perangkat Grafis

Fungsi image_graph()membuka perangkat grafis baru yang mirip dengan misalnya png()atau x11(). Ini mengembalikan objek gambar yang plotnya akan ditulis. Setiap “halaman” di perangkat plotting akan menjadi bingkai di objek gambar.

# Produce image using graphics device
fig <- image_graph(width = 400, height = 400, res = 96)
ggplot2::qplot(mpg, wt, data = mtcars, colour = cyl)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.

Kita dapat dengan mudah melakukan pasca-proses gambar menggunakan operasi gambar biasa.

Perangkat Menggambar

Cara lain untuk menggunakan perangkat grafis adalah dengan menggambar di atas gambar yang keluar menggunakan koordinat piksel.

Secara default image_draw()atur semua margin ke 0 dan gunakan koordinat grafik untuk mencocokkan ukuran gambar dalam piksel (lebar x tinggi) di mana (0,0) adalah sudut kiri atas. Perhatikan bahwa ini berarti sumbu y bertambah dari atas ke bawah yang merupakan kebalikan dari koordinat grafis pada umumnya. Anda dapat mengganti semua ini dengan mengirimkan custom xlim, ylimatau marnilai ke image_draw.

Grafik Animasi

Perangkat grafis mendukung banyak bingkai yang membuatnya mudah untuk membuat grafik animasi. Kode di bawah ini menunjukkan bagaimana Anda akan mengimplementasikan contoh dari paket gganimate yang sangat keren menggunakan perangkat grafis magick.

library(gapminder)
## Warning: package 'gapminder' was built under R version 4.2.3
library(ggplot2)
img <- image_graph(600, 340, res = 96)
datalist <- split(gapminder, gapminder$year)
out <- lapply(datalist, function(data){
  p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
    scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) + 
    scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
  print(p)
})
dev.off()
## png 
##   2
animation <- image_animate(img, fps = 2, optimize = TRUE)
print(animation)
## # A tibble: 12 × 7
##    format width height colorspace matte filesize density
##    <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
##  1 gif      600    340 sRGB       TRUE         0 96x96  
##  2 gif      385    243 sRGB       TRUE         0 96x96  
##  3 gif      395    237 sRGB       TRUE         0 96x96  
##  4 gif      374    232 sRGB       TRUE         0 96x96  
##  5 gif      393    225 sRGB       TRUE         0 96x96  
##  6 gif      373    234 sRGB       TRUE         0 96x96  
##  7 gif      354    234 sRGB       TRUE         0 96x96  
##  8 gif      308    210 sRGB       TRUE         0 96x96  
##  9 gif      320    260 sRGB       TRUE         0 96x96  
## 10 gif      331    218 sRGB       TRUE         0 96x96  
## 11 gif      356    208 sRGB       TRUE         0 96x96  
## 12 gif      347    208 sRGB       TRUE         0 96x96