Python 使用pcolormesh时如何通过插值进行平滑?
我有一个世界的基本地图,它用pcolormesh填充了数据(lintrends_的意思)。因为数据有相对较大的网格框,我想平滑绘图。然而,我不知道该怎么做。在plotting函数中设置shading='gouraud'会使网格框的边缘模糊,但我希望有比这更好的外观,因为数据仍然有污点 这里有一个类似的问题,给出了答案,但我不明白答案,特别是“新深度”来自哪里。我也不能就此事发表评论,因为我缺乏声誉。Python 使用pcolormesh时如何通过插值进行平滑?,python,matplotlib,interpolation,matplotlib-basemap,Python,Matplotlib,Interpolation,Matplotlib Basemap,我有一个世界的基本地图,它用pcolormesh填充了数据(lintrends_的意思)。因为数据有相对较大的网格框,我想平滑绘图。然而,我不知道该怎么做。在plotting函数中设置shading='gouraud'会使网格框的边缘模糊,但我希望有比这更好的外观,因为数据仍然有污点 这里有一个类似的问题,给出了答案,但我不明白答案,特别是“新深度”来自哪里。我也不能就此事发表评论,因为我缺乏声誉。 您有一些变体: 对pcolormesh使用特殊着色 使用允许插入数据的imshow 使用sci
您有一些变体:
pcolormesh
使用特殊着色imshow
scipy插值数据。使用pcolormesh
插值和绘图
import matplotlib.pylab as plt
import numpy as np
from scipy.interpolate import interp2d
data = np.random.random((30,30))
X = np.arange(0, 30, 1)
Y = np.arange(0, 30, 1)
X, Y = np.meshgrid(X, Y)
# colormesh original
plt.subplot(3, 2, 1)
plt.pcolormesh(X, Y, data, cmap='RdBu')
# pcolormesh with special shading
plt.subplot(3, 2, 2)
plt.pcolormesh(X, Y, data, cmap='RdBu',shading='gouraud')
# imshow bilinear interp.
plt.subplot(3, 2, 3)
plt.imshow(data, cmap='RdBu', interpolation = 'bilinear')
# imshow bicubic interp.
plt.subplot(3, 2, 4)
plt.imshow(data, cmap='RdBu', interpolation = 'bicubic')
# scipy interp. cubic
f = interp2d(X, Y, data, kind='cubic')
xnew = np.arange(0, 30, .1)
ynew = np.arange(0, 30, .1)
data1 = f(xnew,ynew)
Xn, Yn = np.meshgrid(xnew, ynew)
plt.subplot(3, 2, 5)
plt.pcolormesh(Xn, Yn, data1, cmap='RdBu')
plt.show()
我无法使用imshow方法,因为这会导致我的数据无法跨越整个底图。在上一个子批次中,f=interp2d(X,Y,data,kind='cubic')中的X&Y是否对应于我的meshlon&meshlat?是的,但它们必须是相同大小的二维数组。这种方法对我来说不太合适。我在获取插值方案时遇到了一些问题,这些插值方案很好地处理了我的数据。对于三次插值,我得到了错误“RuntimeWarning:由于B样条曲线的数量,不能再添加节点。系数已经超过数据点m的数量。可能的原因:s或m太小。”我不完全确定这意味着什么,但结果是一种接近我的最高值的未填充数据的检查板。这是我的数据值的影响吗?不同的插值方法会更好吗?此外,我得到了一些应该允许的插值的“不支持的插值类型”,如“最近”、“双线性”和“双三次”,尽管“线性”可以很好地工作。我正在使用Python 2.7。我需要更新软件包吗?它看起来很粗糙可能被认为是一个功能,而不是一个bug。它不会让你的数据看起来比实际更精细。我知道块状不是一个bug。我的研究顾问只是出于演示的原因建议我平滑网格,我不喜欢仅仅应用gouraud着色的样子。我建议在绘制之前进行插值。它给你更多的控制。
import matplotlib.pylab as plt
import numpy as np
from scipy.interpolate import interp2d
data = np.random.random((30,30))
X = np.arange(0, 30, 1)
Y = np.arange(0, 30, 1)
X, Y = np.meshgrid(X, Y)
# colormesh original
plt.subplot(3, 2, 1)
plt.pcolormesh(X, Y, data, cmap='RdBu')
# pcolormesh with special shading
plt.subplot(3, 2, 2)
plt.pcolormesh(X, Y, data, cmap='RdBu',shading='gouraud')
# imshow bilinear interp.
plt.subplot(3, 2, 3)
plt.imshow(data, cmap='RdBu', interpolation = 'bilinear')
# imshow bicubic interp.
plt.subplot(3, 2, 4)
plt.imshow(data, cmap='RdBu', interpolation = 'bicubic')
# scipy interp. cubic
f = interp2d(X, Y, data, kind='cubic')
xnew = np.arange(0, 30, .1)
ynew = np.arange(0, 30, .1)
data1 = f(xnew,ynew)
Xn, Yn = np.meshgrid(xnew, ynew)
plt.subplot(3, 2, 5)
plt.pcolormesh(Xn, Yn, data1, cmap='RdBu')
plt.show()