Matplotlib之3D绘图和等高线

2018-11-12  本文已影响4人  juriau

1、空间散点图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

x = np.random.normal(0, 1, 100)
y = np.random.normal(0, 1, 100)
z = np.random.normal(0, 1, 100)
ax.scatter(x, y, z)
plt.show()

2、空间线型图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)
y = np.sin(x)
z = np.cos(x)
ax.plot(x, y, z)

plt.show()

3、 曲面图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)

X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X ** 2 + Y ** 2)

ax.plot_surface(Y, X, Z, cmap=plt.cm.winter)
plt.show()

等高线

ax.contour(X, Y, Z)
注:可以通过offset参数来设置空间等高线投影到哪

plt.contour(X, Y, Z)

关于np.meshgrid()和np.ravel()

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([4,5])
>>> x,y = np.meshgrid(a, b)
>>> x
array([[1, 2, 3],
       [1, 2, 3]])

>>> y
array([[4, 4, 4],
       [5, 5, 5]])

>>> np.ravel(x)
array([1, 2, 3, 1, 2, 3])

>>> np.ravel(x, order='f')
array([1, 1, 2, 2, 3, 3])

>>> x.flatten(order='f')
array([1, 1, 2, 2, 3, 3])

np.meshgrid(a, b)函数,按照b的大小扩展a的行数,每一行都是数组a;按照a的大小扩展b的列数,每一列都是数组b。画3D图必备。

np.ravel(x)把N维的数组压缩为1维。也可以使用x.flatten()。效果一样
可选参数order='f',按列的顺序压缩。

上一篇下一篇

猜你喜欢

热点阅读