当前位置: 首页 > 面试题库 >

Python,Matplotlib,绘制多条线(数组)和动画

危裕
2023-03-14
问题内容

我开始使用Python(和OOP)进行编程,但是我对Fortran(90/95)和Matlab编程有丰富的经验。

我正在开发一个在tkinter环境上使用动画的小工具。该工具的目标是为多线动画(数组而不是数据向量)。下面是我的问题的一个简单示例。我不明白为什么这两种数据绘制方法的结果如此不同?

from pylab import *

Nx=10
Ny=20

xx   = zeros( ( Nx,Ny) )
data = zeros( ( Nx,Ny) )

for ii in range(0,Nx):
    for jj in range(0,Ny):
        xx[ii,jj]   = ii
        data[ii,jj] = jj


dline = plot(xx,data)

mline, = plot([],[])
mline.set_data(xx.T,data.T)

show()

如果仅绘制“ dline”,则每条线将分别绘制并使用不同的颜色。如果仅绘制“ mline”,则所有线都是链接的,并且只有一种颜色。

我的目标是制作一个动画,其中“ mline”在每个循环中更改数据。这里是说明我的目的的简单源代码:

from pylab import *
from matplotlib import animation

Nx=10
Ny=20

fig = plt.figure()
fig.set_dpi(100)
fig.set_size_inches(7, 6.5)

ax = plt.axes(xlim=(0, Nx), ylim=(0, Ny))

xx   = zeros( ( Nx,Ny) )
data = zeros( ( Nx,Ny) )
odata = zeros( ( Nx,Ny) )

for ii in range(0,Nx):
    for jj in range(0,Ny):
        xx[ii,jj]    = ii
        odata[ii,jj] = jj
        data[ii,jj]  = 0.

#dline = plot(xx,odata)

mline, = plot([],[])

def init():
    mline.set_data([],[])
    return mline,

def animate(coef):
   for ii in range(0,Nx):
        for jj in range(0,Ny):
            data[ii,jj] = odata[ii,jj] * (1.-float(coef)/360.)

   mline.set_data(xx.T,data.T)
   return mline,

anim = animation.FuncAnimation(fig, animate, 
                               init_func=init, 
                               frames=360, 
                               interval=5,
                               blit=True)

plt.show()

我希望我已经明确地暴露了我的问题。

谢谢,尼古拉斯。


问题答案:

正如@Rutger Kassies在评论中指出的那样,

dline = plot(xx,data)

对输入数据进行一些魔术分析,将您的数组分成一堆xy对,并绘制它们。请注意,dline是一个 列表Line2D对象。在这种情况下

mline, = plot([],[])
mline.set_data(xx.T,data.T)

您正在创建一个Line2D对象,并且库最好将2D数据推入到1D绘图对象中,并通过展平输入来做到这一点。

要设置N线条动画,您只需要N Line2D对象:

lines = [plot([],[])[0] for j in range(Ny)] # make a whole bunch of lines

def init():
    for mline in lines:
        mline.set_data([],[])
    return lines

def animate(coef):
   data = odata * (1.-float(coef)/360.)
   for mline, x, d in zip(lines, data.T, xx.T):
       mline.set_data(x, d)
   return lines

您也不需要预先分配,data并且在python中执行循环要比让numpy它们做起来要慢得多。



 类似资料:
  • 我想创建一个包含三条线(男性、女性、未知)的折线图。这是我的数据示例: 是否有一个选项,在图中自动创建三行或我需要循环通过数据和创建三个跟踪自己?到目前为止,这是我的代码:

  • 超过20条,一条条的写写到猴年马月

  • 问题内容: 我试图在bufferedimage上绘制水平和垂直线。它最终应该看起来像一个网格单元。但是,当我运行代码时,我只看到两行:最左边的行和最上面的行(即,从0,0到0,图像的高度和从0,0到图像的宽度,0的一行),这里是代码段: 和覆盖的绘制方法: 所有这些都在扩展了JPanel的名为RobotMaze的类中。任何帮助表示赞赏。 问题答案:

  • 本文向大家介绍python matplotlib库绘制条形图练习题,包括了python matplotlib库绘制条形图练习题的使用技巧和注意事项,需要的朋友参考一下 练习一:假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据? a = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!

  • 主要内容:示例可以使用类的方法在图像上绘制一条线。以下是此方法的语法。 该方法接受以下参数 - mat - 表示要在其上绘制线条的图像的Mat对象。 pt1和pt2 - 表示要绘制线条的点的两个点对象。 scalar - 表示圆的颜色的标量对象(BGR)。 thickness - 表示线条粗细的整数; 默认情况下,厚度值为。 示例 以下程序演示如何在图像上绘制线条并使用JavaFX窗口显示。 在执行上述程序时,

  • 本文向大家介绍android绘制多个黑竖线条,包括了android绘制多个黑竖线条的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了android绘制多个黑竖线条展示的具体代码,供大家参考,具体内容如下 1.写一个LinearLayout的布局,将宽度写成5dp将高度写成match_parent. 2.在写一个类继承LinearLayout,用LayoutInflater实现子布局的在