【问题标题】:How to plot an animation from data in matrix format如何从矩阵格式的数据中绘制动画
【发布时间】:2016-04-03 01:25:10
【问题描述】:

我有一个包含一系列矩阵的文本文件,格式如下

1000
0000
0000
0000

0000
0100
0000
0000

0000
0000
0010
0000

0000
0000
0000
0001

此文件是由 Fortran 程序生成的模拟结果(实际矩阵为 20x20 格式)。我需要按顺序构建这个矩阵的图形,一个动画。例如,在上面的序列中,预期结果是一个对角线移动的像素(以“1”为像素)

我可以(在 python 中)生成一个矩阵的 bmp 文件

from PIL import Image

m1=([[1,0,0,0],
     [0,0,0,0],
     [0,0,0,0],
     [0,0,0,0]])

img = Image.new('1', (4, 4))
pixels = img.load()

for i in range(img.size[0]):
    for j in range(img.size[1]):
        pixels[i, j] = m1[j][i]

img.save('/home/marco/Pictures/image1.bmp')

我可以用几个 bmp 文件制作一个动画 gif,好的。问题是我有2000个矩阵,所以手工是一件乏味的工作,不优雅

有什么想法吗?也许在 Python、Matplotlib、R、Gnuplot 中。 我认为直接在 Fortran 中我会有更多的工作。

谢谢

【问题讨论】:

    标签: python r matplotlib graphics gnuplot


    【解决方案1】:

    在 R 中,可以这样做:

    txt <- readLines(n=19)
    1000
    0000
    0000
    0000
    
    0000
    0100
    0000
    0000
    
    0000
    0000
    0010
    0000
    
    0000
    0000
    0000
    0001
    # install.packages("animation") # uncomment and run, if needed
    library(animation)
    saveGIF({
      par(mar=c(0,0,0,0))
      lapply(split(txt, cumsum(txt=="")), function(x) {
        x <- do.call(rbind, lapply(strsplit(x, ""), as.integer))
        plot(as.raster(xor(x, 255)), interpolate = FALSE)
      })
    }, interval = 0.3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2018-12-15
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 2019-11-06
      相关资源
      最近更新 更多