历史文章/不再维护

在Python中画三维图某个特定值的等高线

在科研和数据分析中,可能会经常遇到需要画出某个三维图某个特定值的等高线。在Python中,matplotlib库中有contour函数可以画等高线,但好像没有指定特定值的(应该也是有类似的函数,但没怎么去查找)。本篇通过自己单独写的判断代码,画出三维图某个特定值的等高线。

Python代码如下:

"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/29155
"""

import numpy as np
import matplotlib.pyplot as plt

def get_data(x_array, y_array):
    z_matrix = np.zeros((y_array.shape[0], x_array.shape[0]))
    j0 = -1
    for x in x_array:
        j0 += 1
        i0 = -1
        for y in y_array:
            i0 += 1
            z_matrix[i0, j0] = x**2+y**2
    return z_matrix

x_array = np.linspace(-1, 1, 1000)
y_array = x_array
z_matrix = get_data(x_array, y_array)  # 举例的数据

fix_value = 0.5  # 画这个值附近的等高线
precision = 0.01 # 选取该值附近的范围

# 方法一
x_array_new = []
y_array_new = []
for i0 in range(y_array.shape[0]):
    for j0 in range(x_array.shape[0]):
        if abs(z_matrix[i0, j0]-fix_value)<precision:
            x_array_new.append(x_array[j0])
            y_array_new.append(y_array[i0])
fig, ax = plt.subplots()
plt.plot(x_array_new, y_array_new, 'o')
ax.set_xlim(min(x_array), max(x_array))
ax.set_ylim(min(y_array), max(y_array))
plt.show()

# 方法二
for i0 in range(y_array.shape[0]):
    for j0 in range(x_array.shape[0]):
        if abs(z_matrix[i0, j0]-fix_value)>precision:
            z_matrix[i0, j0] = None
fig, ax = plt.subplots()
ax.contourf(x_array,y_array,z_matrix) 
plt.show()

运行结果:

356 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code