如何使用Matplotlib可视化标量2D数据?

Esk*_*kil 10 python matplotlib

所以我有一个meshgrid(矩阵X和Y)以及标量数据(矩阵Z),我需要将其可视化.优选地,一些2D图像在其中显示Z值的点处具有颜色.我做了一些研究,但没有发现任何我想要的东西.

pyplot.imshow(Z)具有良好的外观,但它不需要我的X和Y矩阵,因此轴是错误的,它不能处理由X和Y给出的非线性间隔点.

pyplot.pcolor(X,Y,Z)使颜色正方形的颜色与其一个角上的数据相对应,因此它会错误地表示数据(它应该在其中心显示数据或其他内容).此外,它忽略数据矩阵中的两条边.

我很确定在Matplotlib中某处必须存在一些更好的方法,但是文档很难得到概述.所以我在问别人是否知道更好的方法.奖励,如果它允许我刷新矩阵Z来制作动画.

Pau*_*aul 10

这看起来不错,但效率低下:

from pylab import *
origin = 'lower'

delta = 0.025

x = y = arange(-3.0, 3.01, delta)
X, Y = meshgrid(x, y)
Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10 * (Z1 - Z2)

nr, nc = Z.shape

CS = contourf(
    X, Y, Z,
    levels = linspace(Z.min(), Z.max(), len(x)),
    ls = '-',
    cmap=cm.bone,
    origin=origin)

CS1 = contour(
    CS,
    levels = linspace(Z.min(), Z.max(), len(x)),
    ls = '-',
    cmap=cm.bone,
    origin=origin)

show()
Run Code Online (Sandbox Code Playgroud)

它是我,我将数据(使用scipy.interpolate)重新插入到常规网格中并使用imshow(),设置范围来修复轴.

精细的轮廓

编辑(每条评论):

动画轮廓图可以像这样完成,但是,就像我说的那样,上面的效率很低,只是简单地滥用等高线图功能.做你想做的最有效的方法是使用SciPy.你有安装吗?

import matplotlib
matplotlib.use('TkAgg') # do this before importing pylab
import time
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

def animate():
    origin = 'lower'
    delta = 0.025

    x = y = arange(-3.0, 3.01, delta)
    X, Y = meshgrid(x, y)
    Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
    Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
    Z = 10 * (Z1 - Z2)

    CS1 = ax.contourf(
        X, Y, Z,
        levels = linspace(Z.min(), Z.max(), 10),
        cmap=cm.bone,
        origin=origin)

    for i in range(10):
        tempCS1 = contourf(
            X, Y, Z,
            levels = linspace(Z.min(), Z.max(), 10),
            cmap=cm.bone,
            origin=origin)
        del tempCS1
        fig.canvas.draw()
        time.sleep(0.1)
        Z += x/10

win = fig.canvas.manager.window
fig.canvas.manager.window.after(100, animate)
plt.show()
Run Code Online (Sandbox Code Playgroud)