Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pcolormesh时如何通过插值进行平滑?_Python_Matplotlib_Interpolation_Matplotlib Basemap - Fatal编程技术网

Python 使用pcolormesh时如何通过插值进行平滑?

Python 使用pcolormesh时如何通过插值进行平滑?,python,matplotlib,interpolation,matplotlib-basemap,Python,Matplotlib,Interpolation,Matplotlib Basemap,我有一个世界的基本地图,它用pcolormesh填充了数据(lintrends_的意思)。因为数据有相对较大的网格框,我想平滑绘图。然而,我不知道该怎么做。在plotting函数中设置shading='gouraud'会使网格框的边缘模糊,但我希望有比这更好的外观,因为数据仍然有污点 这里有一个类似的问题,给出了答案,但我不明白答案,特别是“新深度”来自哪里。我也不能就此事发表评论,因为我缺乏声誉。 您有一些变体: 对pcolormesh使用特殊着色 使用允许插入数据的imshow 使用sci

我有一个世界的基本地图,它用pcolormesh填充了数据(lintrends_的意思)。因为数据有相对较大的网格框,我想平滑绘图。然而,我不知道该怎么做。在plotting函数中设置shading='gouraud'会使网格框的边缘模糊,但我希望有比这更好的外观,因为数据仍然有污点

这里有一个类似的问题,给出了答案,但我不明白答案,特别是“新深度”来自哪里。我也不能就此事发表评论,因为我缺乏声誉。


您有一些变体:

  • 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()