arrays - matplotlib 中二维数组的等高线图

标签 arrays numpy matplotlib 2d

我有以下代码,并尝试绘制数据的等高线图。我尝试遵循论坛中的一些示例,但没有成功。我运行这段代码生成的情节并不是很好。任何建议将不胜感激。预先感谢您的帮助。

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

N = 1000  # number of points for plotting/interpolation

FR = np.array([[0.763, 0.762, 0.954, 0.000, 0.835, 0.000],
               [0.000, 1.052, 1.080, 1.176, 0.864, 0.811],
               [1.179, 1.148, 1.368, 0.000, 1.147, 0.000],
               [0.000, 1.279, 1.315, 1.434, 1.031, 0.880],
               [1.176, 1.134, 1.355, 0.000, 1.131, 0.000],
               [0.000, 1.008, 1.045, 1.092, 0.840, 0.724],
               [0.672, 0.682, 0.755, 0.708, 0.643, 0.000]])

x = np.arange(1, 7)
y = np.arange(7, 1 + (-1), -1)

# Set up a regular grid of interpolation points
# xi, yi = np.linspace(x.min(), x.max(), N), np.linspace(y.min(), y.max(), N)
# xi, yi = np.meshgrid(xi, yi)

# Interpolate
# rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
# zi = rbf(xi, yi)

# plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower',
#           extent=[x.min(), x.max(), y.min(), y.max()])
# plt.scatter(x, y, c=z)
# plt.colorbar()
# plt.show()
# plt.imshow(FR, interpolation='nearest')

# xi = np.linspace(x.min(), x.max(), N)
# yi = np.linspace(y.min(), y.max(), N)
# zi = scipy.interpolate.griddata((x, y), z, (xi[None,:], yi[:,None]), method='cubic')

# fig = plt.figure()
# plt.contour(xi, yi, zi)
# plt.xlabel("X")
# plt.ylabel("Y")
# plt.show()


# plt.pcolor()
# plt.colorbar()
plt.contourf(FR)
plt.axis('off')
plt.grid()
plt.show()

最佳答案

我认为你的不太好意味着轮廓不平滑,这里有两种插值数据的方法:

import pylab as pl
from matplotlib import cm
import numpy as np
from scipy import interpolate
from scipy import ndimage

FR = np.array([[0.763, 0.762, 0.954, 0.000, 0.835, 0.000],
               [0.000, 1.052, 1.080, 1.176, 0.864, 0.811],
               [1.179, 1.148, 1.368, 0.000, 1.147, 0.000],
               [0.000, 1.279, 1.315, 1.434, 1.031, 0.880],
               [1.176, 1.134, 1.355, 0.000, 1.131, 0.000],
               [0.000, 1.008, 1.045, 1.092, 0.840, 0.724],
               [0.672, 0.682, 0.755, 0.708, 0.643, 0.000]])

X, Y = np.mgrid[0:1:7j, 0:1:6j]

fig, axes = pl.subplots(1, 3, figsize=(15, 4))
c1 = axes[0].contourf(X, Y, FR)
pl.colorbar(c1, ax=axes[0]);

tmp = np.repeat(np.repeat(FR, 10, axis=1), 10, axis=0)
x, y = np.mgrid[0:1:70j, 0:1:60j]
c2 = axes[1].contourf(x, y, ndimage.gaussian_filter(tmp, 3), levels=c1.levels)
pl.colorbar(c2, ax=axes[1]);

rbf = interpolate.Rbf(X.ravel(), Y.ravel(), FR.ravel(), smooth=0.000001)

X2, Y2 = np.mgrid[0:1:70j, 0:1:60j]

c3 = pl.contourf(X2, Y2, rbf(X2, Y2))
pl.colorbar(c3, ax=axes[2]);

输出:

enter image description here

关于arrays - matplotlib 中二维数组的等高线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732305/

相关文章:

PHP:从数组中获取两个日期之间的元素

c++ - 如何在 C++ 中创建字符数组数组? (仅使用 iostream)

python - Python 中的 Streamplot 错误

python - 在 python 中构建对象列表以进行矢量化 : Can a list of structures(objects) be vectorized, 或者需要显式数组

python - 如何使用 matplotlib 在 python 中绘制 3D 密度图

java - 为什么 hashcode() 返回一个整数而不是长?

java - 将 JButton 的多个实例添加到网格中的 JFrame

python - 代码完成例如Numpy、SciPy 或 Matplotlib 在 Eclipse PyDev 中不起作用

matplotlib - 在客户端机器上制作 ipython notebook %matplotlib qt 弹出图

python - 左侧 1 个 x 轴、1 个 y 轴、右侧 1 个 y 轴