python绘制等值线图_PythonMatplotlib双线性插值等值线图我想绘制⼀个⼆维数据图,其中的值是由双线性插值确定的。作为初步测试,我决定只使⽤页⾯上的⽰例:
但是,⼀般来说,我需要这种⽅法来处理任何⼀组数据,所以⼀个只适⽤于这种特殊情况的解决⽅案是没有⽤的。下⾯的数据中有⼀个稍微复杂的例⼦,注释为“另⼀个例⼦”。在
以下是我迄今为⽌所做的⼏次尝试,并有评论提到了它为什么不起作⽤:import matplotlib
import numpy as np
as cm
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
xi = np.array([0.0, 1.0])
yi = np.array([0.0, 1.0])matplotlib中subplot
zi = np.array([[0.0, 1.0], [1.0, 0.5]])
# Another example
#xi = np.array([0.0, 0.25, 1.0])
#yi = np.array([0.0, 0.75, 1.0])
#zi = np.array([[0.0, 0.5, 1.0], [0.5, 0.7, 0.5], [1.0, 1.0, 1.0]])
# I want 20 "levels" to be shown
contour_breaks = 20
ticks = np.linspace(zi.min(), zi.max(), contour_breaks, endpoint=True)
# Attempt #1 (contour does not use bilinear interpolation)
fig = plt.figure()
axes = fig.add_subplot(111, aspect='equal')
fill = urf(xi, yi, zi, ticks, cmap=cm.jet)
# Attempt 2 (colors are weird for imshow -- they don't seem to be jet. I can't
# make it use ticks to make constant color zones/levels. The contour
# lines are the same as before (no bilinear). Also, you cannot input
# xi and yi, so the data would have to be interpolated to a regular
# grid - see the second set of example data above for an example
# where the data isn't regularly spaced)
fig = plt.figure()
axes = fig.add_subplot(111, aspect='equal')
fill = axes.imshow(zi, interpolation='bilinear', cmap=cm.jet,
extent=(0.,1.,0.,1.))
# Attempt 3 (griddata doens't do bilinear interpolation)
fig = plt.figure()
axes = fig.add_subplot(111, aspect='equal')
xi1, yi1 = np.meshgrid(xi, yi)
xi1 = xi1.flatten()
yi1 = yi1.flatten()
zi1 = zi.flatten()
xi2 = np.linspace(0., 1., 100)
yi2 = np.linspace(0., 1., 100)
zi2 = griddata((xi1, yi1), zi1, (xi2[None,:], yi2[:,None]), method='linear') ur(xi2, yi2, zi2, ticks[1:-1], colors='k')
fill = urf(xi2, yi2, zi2, ticks, cmap=cm.jet)
# Show the plots
plt.show()