python科学绘图-matplotlib绘制三维函数图像,并且在函数底部绘制等值线

python使用matplotlib库绘制三维函数图像,并且在底部绘制等值线。

三维图像函数

surface = ax.plot_surface(X, Y, zss, camp=色带)

等值线函数

contour = ax.contour(xs, ys, zss, zdir=在哪个轴绘制, offset=在该轴什么位置绘制, camp=色带, zorder=图层位置)

 颜色条函数

plt.colorbar(surface, shrink=缩放, aspect=宽度比例)

 完整示例代码如下:

from typing import Sequence

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize

matplotlib.use('TkAgg')


def drawSurface(ax: plt.Axes, xs: Sequence[float], ys: Sequence[float], zss: Sequence[Sequence[float]]):
    """
    绘制三维函数图 z = f(x, y)
    并在底部绘制等值线
    """
    xs, ys, zss = np.array(xs), np.array(ys), np.array(zss)
    X, Y = np.meshgrid(np.array(xs), np.array(ys))
    surf = ax.plot_surface(X, Y, zss, cmap='rainbow_r', )
    bar = plt.colorbar(surf, shrink=0.5, aspect=8)
    norm = Normalize(vmin=zss.min(), vmax=zss.max())
    contour = ax.contour(xs, ys, zss, zdir='z', offset=np.min(zss), cmap='rainbow_r', norm=norm, zorder=0)
    ax.clabel(contour, inline=True, fontsize=8)
    ax.xaxis.set_major_locator(plt.MultipleLocator(2))
    ax.yaxis.set_major_locator(plt.MultipleLocator(2))
    ax.zaxis.set_major_locator(plt.MultipleLocator(2))
    ax.set_title('$f(x, y)$')


def fxy(xs: Sequence[float], ys: Sequence[float]) -> Sequence[Sequence[float]]:
    xs, ys = np.meshgrid(np.array(xs), np.array(ys))
    zss = -20 * np.exp(-0.2 * np.sqrt(1 / 2 * (xs ** 2 + ys ** 2))) - np.exp(
        1 / 2 * (np.cos(2 * np.pi * xs) + np.cos(2 * np.pi * ys)))
    return zss


if __name__ == '__main__':
    x = np.linspace(-10, 10, 500)
    y = np.linspace(-10, 10, 500)
    z = fxy(x, y)

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    drawSurface(ax, x, y, z)

    plt.show()

 运行结果:

python科学绘图-matplotlib绘制三维函数图像,并且在函数底部绘制等值线_第1张图片

图片挺炫吧,拿去水论文吧

你可能感兴趣的:(python科学绘图,python,matplotlib,开发语言)