r语言 - 具有许多数据点的动画地图 (GIF)



我正在尝试使用animation包创建动画地图。 只要动画中包含的数据点数为 600 或更少,我就可以这样做。 但是,我的一些数据集包含大约 800 个数据点。 当我尝试创建包含 800 个数据点的动画地图时,我收到一个错误,如下所示。 我尝试在ani.options函数中尝试nmax选项,但没有成功。

感谢您就如何在动画地图上包含 800 个左右的观测值提供任何建议。 我能想到的唯一选择是精简数据集,减少数据点的数量。

以下是在n.obs <- 600时起作用的功能代码,但在n.obs <- 800时不起作用:

library(maps)
library(mapdata)
library(maptools)
library(mapproj)
library(animation)
setwd('C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/')
set.seed(1234)
  n.obs <-  600      # this works
  n.obs <-  800      # this does not work
  n.obs <- 1165      # this does not work: maximum number of data points in a single data set
longitud <- sample(40:50, n.obs, replace = TRUE)
latitude <- sample(40:50, n.obs, replace = TRUE)
saveGIF({
x <- longitud
y <- latitude
idx <- seq(1, n.obs)
  ani.options(interval = 0.5, nmax = 900, 
       convert = shortPathName("C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/magick.exe"))
  for (i in seq_along(idx)) {
    map('worldHires', xlim=c(40, 50), ylim=c(40, 50), resolution=0, col = "black")
    map.axes()
    title(main = 'My Stuff', line =  0.75)
    points(x[seq(i)], y[seq(i)], pch = 20, col = "blue")
    ani.pause()
  }
}, interval = 0.05, 
   movie.name = paste0("C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/test_Jun30_2017.gif"), 
       outdir =        "C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/",
ani.width = 600, ani.height = 600)

以下是错误消息:

animation option 'nmax' changed: 50 --> 900
Executing: 
"C:UsersmmillerDOCUME~1IMAGEM~1.6-Qmagick.exe -loop 0 -delay 50 Rplot1.png Rplot2.png Rplot3.png Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png Rplot64.png Rplot65.png Rplot66.png Rplot67.png Rplot68.png Rplot69.png Rplot70.png Rplot71.png Rplot72.png Rplot73.png Rplot74.png Rplot75.png Rplot76.png Rplot77.png Rplot78.png Rplot79.png Rplot80.png Rplot81.png Rplot82.png Rplot83.png Rplot84.png Rplot85.png Rplot86.png Rplot87.png Rplot88.png Rplot89.png Rplot90.png Rplot91.png Rplot92.png Rplot93.png Rplot94.png Rplot95.png Rplot96.png Rplot97.png Rplot98.png Rplot99.png Rplot100.png Rplot101.png Rplot102.png Rplot103.png Rplot104.png Rplot105.png Rplot106.png Rplot107.png Rplot108.png Rplot109.png Rplot110.png Rplot111.png Rplot112.png Rplot113.png Rplot114.png Rplot115.png Rplot116.png Rplot117.png Rplot118.png Rplot119.png Rplot120.png Rplot121.png Rplot122.png Rplot123.png Rplot124.png Rplot125.png Rplot126.png Rplot127.png Rplot128.png Rplot129.png Rplot130.png Rplot131.png Rplot132.png Rplot133.png Rplot134.png Rplot135.png Rplot136.png Rplot137.png Rplot138.png Rplot139.png Rplot140.png Rplot141.png Rplot142.png Rplot143.png Rplot144.png Rplot145.png Rplot146.png Rplot147.png Rplot148.png Rplot149.png Rplot150.png Rplot151.png Rplot152.png Rplot153.png Rplot154.png Rplot155.png Rplot156.png Rplot157.png Rplot158.png Rplot159.png Rplot160.png Rplot161.png Rplot162.png Rplot163.png Rplot164.png Rplot165.png Rplot166.png Rplot167.png Rplot168.png Rplot169.png
    Rplot170.png Rplot171.png Rplot172.png Rplot173.png Rplot174.png Rplot175.png Rplot176.png Rplot177.png Rplot178.png Rplot179.png Rplot180.png Rplot181.png Rplot182.png Rplot183.png Rplot184.png Rplot185.png Rplot186.png Rplot187.png Rplot188.png Rplot189.png Rplot190.png Rplot191.png Rplot192.png Rplot193.png Rplot194.png Rplot195.png Rplot196.png Rplot197.png Rplot198.png Rplot199.png Rplot200.png Rplot201.png Rplot202.png Rplot203.png Rplot204.png Rplot205.png Rplot206.png Rplot207.png Rplot208.png Rplot209.png Rplot210.png Rplot211.png Rplot212.png Rplot213.png Rplot214.png Rplot215.png Rplot216.png Rplot217.png Rplot218.png Rplot219.png Rplot220.png Rplot221.png Rplot222.png Rplot223.png Rplot224.png Rplot225.png Rplot226.png Rplot227.png Rplot228.png Rplot229.png Rplot230.png Rplot231.png Rplot232.png Rplot233.png Rplot234.png Rplot235.png Rplot236.png Rplot237.png Rplot238.png Rplot239.png Rplot240.png Rplot241.png Rplot242.png Rplot243.png Rplot244.png Rplot245.png Rplot246.png Rplot247.png Rplot248.png Rplot249.png Rplot250.png Rplot251.png Rplot252.png Rplot253.png Rplot254.png Rplot255.png Rplot256.png Rplot257.png Rplot258.png Rplot259.png Rplot260.png Rplot261.png Rplot262.png Rplot263.png Rplot264.png Rplot265.png Rplot266.png Rplot267.png Rplot268.png Rplot269.png Rplot270.png Rplot271.png Rplot272.png Rplot273.png Rplot274.png Rplot275.png Rplot276.png Rplot277.png Rplot278.png Rplot279.png Rplot280.png Rplot281.png Rplot282.png Rplot283.png Rplot284.png Rplot285.png Rplot286.png Rplot287.png Rplot288.png Rplot289.png Rplot290.png Rplot291.png Rplot292.png Rplot293.png Rplot294.png Rplot295.png Rplot296.png Rplot297.png Rplot298.png Rplot299.png Rplot300.png Rplot301.png Rplot302.png Rplot303.png Rplot304.png Rplot305.png Rplot306.png Rplot307.png Rplot308.png Rplot309.png Rplot310.png Rplot311.png Rplot312.png Rplot313.png Rplot314.png Rplot315.png Rplot316.png Rplot317.png Rplot318.png Rplot319.png Rplot320.png Rplot321.png Rplot322.png Rplot323.png Rplot324.png Rplot325.png Rplot326.png Rplot327.png Rplot328.png Rplot329.png Rplot330.png Rplot331.png Rplot332.png Rplot333.png Rplot334.png
    Rplot335.png Rplot336.png Rplot337.png Rplot338.png Rplot339.png Rplot340.png Rplot341.png Rplot342.png Rplot343.png Rplot344.png Rplot345.png Rplot346.png Rplot347.png Rplot348.png Rplot349.png Rplot350.png Rplot351.png Rplot352.png Rplot353.png Rplot354.png Rplot355.png Rplot356.png Rplot357.png Rplot358.png Rplot359.png Rplot360.png Rplot361.png Rplot362.png Rplot363.png Rplot364.png Rplot365.png Rplot366.png Rplot367.png Rplot368.png Rplot369.png Rplot370.png Rplot371.png Rplot372.png Rplot373.png Rplot374.png Rplot375.png Rplot376.png Rplot377.png Rplot378.png Rplot379.png Rplot380.png Rplot381.png Rplot382.png Rplot383.png Rplot384.png Rplot385.png Rplot386.png Rplot387.png Rplot388.png Rplot389.png Rplot390.png Rplot391.png Rplot392.png Rplot393.png Rplot394.png Rplot395.png Rplot396.png Rplot397.png Rplot398.png Rplot399.png Rplot400.png Rplot401.png Rplot402.png Rplot403.png Rplot404.png Rplot405.png Rplot406.png Rplot407.png Rplot408.png Rplot409.png Rplot410.png Rplot411.png Rplot412.png Rplot413.png Rplot414.png Rplot415.png Rplot416.png Rplot417.png Rplot418.png Rplot419.png Rplot420.png Rplot421.png Rplot422.png Rplot423.png Rplot424.png Rplot425.png Rplot426.png Rplot427.png Rplot428.png Rplot429.png Rplot430.png Rplot431.png Rplot432.png Rplot433.png Rplot434.png Rplot435.png Rplot436.png Rplot437.png Rplot438.png Rplot439.png Rplot440.png Rplot441.png Rplot442.png Rplot443.png Rplot444.png Rplot445.png Rplot446.png Rplot447.png Rplot448.png Rplot449.png Rplot450.png Rplot451.png Rplot452.png Rplot453.png Rplot454.png Rplot455.png Rplot456.png Rplot457.png Rplot458.png Rplot459.png Rplot460.png Rplot461.png Rplot462.png Rplot463.png Rplot464.png Rplot465.png Rplot466.png Rplot467.png Rplot468.png Rplot469.png Rplot470.png Rplot471.png Rplot472.png Rplot473.png Rplot474.png Rplot475.png Rplot476.png Rplot477.png Rplot478.png Rplot479.png Rplot480.png Rplot481.png Rplot482.png Rplot483.png Rplot484.png Rplot485.png Rplot486.png Rplot487.png Rplot488.png Rplot489.png Rplot490.png Rplot491.png Rplot492.png Rplot493.png Rplot494.png Rplot495.png Rplot496.png Rplot497.png Rplot498.png Rplot499.png
    Rplot500.png Rplot501.png Rplot502.png Rplot503.png Rplot504.png Rplot505.png Rplot506.png Rplot507.png Rplot508.png Rplot509.png Rplot510.png Rplot511.png Rplot512.png Rplot513.png Rplot514.png Rplot515.png Rplot516.png Rplot517.png Rplot518.png Rplot519.png Rplot520.png Rplot521.png Rplot522.png Rplot523.png Rplot524.png Rplot525.png Rplot526.png Rplot527.png Rplot528.png Rplot529.png Rplot530.png Rplot531.png Rplot532.png Rplot533.png Rplot534.png Rplot535.png Rplot536.png Rplot537.png Rplot538.png Rplot539.png Rplot540.png Rplot541.png Rplot542.png Rplot543.png Rplot544.png Rplot545.png Rplot546.png Rplot547.png Rplot548.png Rplot549.png Rplot550.png Rplot551.png Rplot552.png Rplot553.png Rplot554.png Rplot555.png Rplot556.png Rplot557.png Rplot558.png Rplot559.png Rplot560.png Rplot561.png Rplot562.png Rplot563.png Rplot564.png Rplot565.png Rplot566.png Rplot567.png Rplot568.png Rplot569.png Rplot570.png Rplot571.png Rplot572.png Rplot573.png Rplot574.png Rplot575.png Rplot576.png Rplot577.png Rplot578.png Rplot579.png Rplot580.png Rplot581.png Rplot582.png Rplot583.png Rplot584.png Rplot585.png Rplot586.png Rplot587.png Rplot588.png Rplot589.png Rplot590.png Rplot591.png Rplot592.png Rplot593.png Rplot594.png Rplot595.png Rplot596.png Rplot597.png Rplot598.png Rplot599.png Rplot600.png Rplot601.png Rplot602.png Rplot603.png Rplot604.png Rplot605.png Rplot606.png Rplot607.png Rplot608.png Rplot609.png Rplot610.png Rplot611.png Rplot612.png Rplot613.png Rplot614.png Rplot615.png Rplot616.png Rplot617.png Rplot618.png Rplot619.png Rplot620.png Rplot621.png Rplot622.png Rplot623.png Rplot624.png Rplot625.png Rplot626.png Rplot627.png Rplot628.png Rplot629.png Rplot630.png Rplot631.png RplThe command line is too long.
an error occurred in the conversion... see Notes in ?im.convert
animation option 'nmax' changed: 900 --> 50
[1] FALSE
Warning messages:
1: running command 'C:Windowssystem32cmd.exe /c "C:UsersmmillerDOCUME~1IMAGEM~1.6-Qmagick.exe -loop 0  -delay 50 Rplot1.png Rplot2.png Rplot3.png Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png Rplot64.png Rplot65.png Rplot66.png Rplot67.png Rplot68.png Rplot69.png Rplot70.png Rplot71.png Rplot72.png Rplot73.png Rplot74.png Rpl [... truncated] 
2: In cmd.fun(convert) :
  '"C:UsersmmillerDOCUME~1IMAGEM~1.6-Qmagick.exe -loop 0  -delay 50 Rplot1.png Rplot2.png Rplot3.png Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png Rplot64.png Rplot65.png Rplot66.png Rplot67.png Rplot68.png Rplot69.png Rplot70.png Rplot71.png Rplot72.png Rplot73.png Rplot74.png Rplot75.png Rplot76.png Rplot77.png Rplot78.png Rp [... truncated]
3: running command '"C:UsersmmillerDOCUME~1IMAGEM~1.6-Qmagick.exe -loop 0  -delay 50 Rplot1.png Rplot2.png Rplot3.png Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png Rplot64.png Rplot65.png Rplot66.png Rplot67.png Rplot68.png Rplot69.png Rplot70.png Rplot71.png Rplot72.png Rplot73.png Rplot74.png Rplot75.png Rplot76.png Rplot77.pn [... truncated] 

我相信我已经能够让animation包处理 800 个数据点,但这样做需要我破解R代码。 不幸的是,此解决方案不适用于 1100 个数据点。

saveGIF 函数命名每个以单词 Rplot 开头的输出图。 我从错误消息中猜测,800 个文件名正在创建一个太长的字符串或行,如果我可以缩短animation包正在创建的文件名,那么代码可能会运行。

我只需在光标处键入 saveGIF 并按回车键即可获得 saveGIF 函数的代码。 然后我把img.name = "Rplot"改成了img.name = "R".

然后,我在R代码文件中包含了saveGIF函数的"我的"版本。 我还必须包含使用以下行获得的in_dir函数的代码:

animation:::in_dir

在我的R文件中添加修改后的saveGIF函数和in_dir函数的代码后,代码运行了 800 个数据点(但不是 1100 个数据点(。 以下是包含 800 个数据点的功能代码:

library(maps)
library(mapdata)
library(maptools)
library(mapproj)
library(animation)
setwd('C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/')
set.seed(1234)
  n.obs <- 800      # this works
longitud <- sample(40:50, n.obs, replace = TRUE)
latitude <- sample(40:50, n.obs, replace = TRUE)
saveGIF <- function (expr, movie.name = "animation.gif", img.name = "R", 
    convert = "convert", cmd.fun, clean = TRUE, ...) 
{
    oopt = ani.options(...)
    on.exit(ani.options(oopt))
    if (!dir.exists(dirname(movie.name))) {
        dir.create(dirname(movie.name))
    }
    owd = setwd(tempdir())
    on.exit(setwd(owd), add = TRUE)
    file.ext = ani.options("ani.type")
    unlink(paste(img.name, "*.", file.ext, sep = ""))
    ani.dev = ani.options("ani.dev")
    if (is.character(ani.dev)) 
        ani.dev = get(ani.dev)
    img.fmt = paste(img.name, "%d.", file.ext, sep = "")
    if ((use.dev <- ani.options("use.dev"))) 
        ani.dev(file.path(tempdir(), img.fmt), width = ani.options("ani.width"), 
            height = ani.options("ani.height"))
    in_dir(owd, expr)
    if (use.dev) 
        dev.off()
    if (file.ext == "pdf") 
        compress_pdf(img.name)
    img.files = sprintf(img.fmt, seq_len(length(list.files(pattern = paste(img.name, 
        "[0-9]+\.", file.ext, sep = "")))))
    if (missing(cmd.fun)) 
        cmd.fun = if (.Platform$OS.type == "windows") 
            shell
        else system
    im.convert(img.files, output = path.expand(movie.name), convert = convert, 
        cmd.fun = cmd.fun, clean = clean)
    setwd(owd)
    if (!grepl(tempdir(), movie.name, fixed = T)) {
        file.copy(file.path(tempdir(), basename(movie.name)), 
            path.expand(movie.name), overwrite = TRUE)
    }
}

# animation:::in_dir
in_dir <- function (wd, expr) {
    owd = setwd(wd)
    on.exit(setwd(owd))
    expr
}

saveGIF({
x <- longitud
y <- latitude
idx <- seq(1, n.obs)
  ani.options(interval = 0.5, nmax = 900, 
       convert = shortPathName("C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/magick.exe"))
  for (i in seq_along(idx)) {
    map('worldHires', xlim=c(40, 50), ylim=c(40, 50), resolution=0, col = "black")
    map.axes()
    title(main = 'My Stuff', line =  0.75)
    points(x[seq(i)], y[seq(i)], pch = 20, col = "blue")
    ani.pause()
  }
}, interval = 0.05, 
   movie.name = paste0("C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/test_Jun30_2017.gif"), 
       outdir =        "C:/Users/mmiller/Documents/ImageMagick-7.0.6-Q16/",
ani.width = 600, ani.height = 600)

最新更新