Python3:Plot f(x,y),最好使用matplotlib [英] Python3:Plot f(x,y), preferably using matplotlib

查看:46
本文介绍了Python3:Plot f(x,y),最好使用matplotlib的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法,最好使用 matplotlib,在 python 中绘制一个 2 变量函数 f(x,y);谢谢你.

Is there a way, preferably using matplotlib, to plot a 2-variable function f(x,y) in python; Thank you, in advance.

推荐答案

如果您有Z的表达子

如果您有 Z 的表达式,您可以生成网格,并调用 surface_plot:

If You have an expresson for Z

If You have an expression for Z You can generate mesh, and call for surface_plot:

#!/usr/bin/python3

import sys

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

import numpy
from numpy.random import randn, shuffle
from scipy import linspace, meshgrid, arange, empty, concatenate, newaxis, shape


# =========================
## generating ordered data:

N = 32
x = sorted(randn(N))
y = sorted(randn(N))

X, Y = meshgrid(x, y)
Z = X**2 + Y**2


# ======================================
## reference picture (X, Y and Z in 2D):

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

title = ax.set_title("plot_surface: given X, Y and Z as 2D:")
title.set_y(1.01)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
fig.savefig('3D-constructing-{}.png'.format(N))

结果:

surface_plot 函数仅 接受 X,Y 和 Z 作为二维数组.如果没有 Z 的表达式,这是不可能的——而只是将数据存储在列表列表中:[[x1, y1, z1],[x2,y2,z2],...] .在这种情况下,您可以使用 plot_trisurf .

surface_plot function used above only accepts X, Y and Z as 2D arrays. Which is not possible if don't have an expression for Z -- but just have a data stored in a list of lists: [[x1, y1, z1],[x2,y2,z2],...]. In this case You can use plot_trisurf.

在下面的代码中,我构造了 X、Y 和 Z 的 2D,然后将数据重新整形为 1D 中的 X、Y 和 Z,将其打乱,然后使用 plot_trisurf 绘制相同的图数据:

In a code below I construct 2D of X, Y and Z, then re-shape the data to have X, Y and Z in 1D, shuffle it, and use plot_trisurf to plot the same data:

#!/usr/bin/python3

import sys

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

import numpy
from numpy.random import randn, shuffle
from scipy import linspace, meshgrid, arange, empty, concatenate, newaxis, shape


# =========================
## generating ordered data:

N = 128
x = sorted(randn(N))
y = sorted(randn(N))

X, Y = meshgrid(x, y)
Z = X**2 + Y**2


# =======================
## re-shaping data in 1D:

# flat and prepare for concat:
X_flat = X.flatten()[:, newaxis]
Y_flat = Y.flatten()[:, newaxis]
Z_flat = Z.flatten()[:, newaxis]

DATA = concatenate((X_flat, Y_flat, Z_flat), axis=1)

shuffle(DATA)

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]


# ====================================================
## plotting surface using X, Y and Z given as 1D data:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

title = ax.set_title("plot_trisurf: takes X, Y and Z as 1D")
title.set_y(1.01)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()
fig.savefig('3D-reconstructing-{}.png'.format(N))

结果:

这篇关于Python3:Plot f(x,y),最好使用matplotlib的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆