颜色贴图不适用于由生成的绘图scipy.gridd公司

2024-04-19 19:05:26 发布

您现在位置:Python中文网/ 问答频道 /正文

摘要

我有一些随机放置的数据,我想强制到一个网格,并显示在一个三维表面彩色绘图。我使用scipy.interpolate.griddata网格数据(). 但是,当使用“线性”或“立方”的方法参数时,曲面仅渲染为贴图中值最低的颜色。你知道吗

我尝试过但没有成功的事情:

  • 更改栅格的边界。你知道吗
  • 规范化数据。你知道吗
  • 一次只显示一个绘图。你知道吗
  • 绘制各种测试函数(Ackley、Rastrigin、Himmelblau、Rosenbrock)。你知道吗

一些代码:

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

def rosenbrock(x, y):
   # plotting test function
   return 100.0 * (y - x**2)**2 + (1.0 - x)**2

def plotGrid(x, y, z, title):
   # plot data as a 3D surface above a contour map
   cmap = plt.get_cmap('Spectral')
   fig = plt.figure()
   ax = Axes3D(fig)
   ax.plot_surface(x, y, z, cmap=cmap)
   ax.contour(     x, y, z, cmap=cmap, offset=0.0)
   ax.set_title(title)

def main():
   # generate a grid to interpolate between
   gx, gy = np.mgrid[-5:5:100j, -5:5:100j]
   # generate random points to mold into the desired grid
   p = np.random.rand(100, 2) * 10.0 - 5.0
   # find values for each random point pair
   v = rosenbrock(p[:,0], p[:,1])

   # interpolate the data into a grid
   g0 = griddata(p, v, (gx, gy), method='nearest')
   g1 = griddata(p, v, (gx, gy), method='linear')
   g2 = griddata(p, v, (gx, gy), method='cubic')

   # plot the data
   plotGrid(gx, gy, rosenbrock(gx, gy), 'True Grid')
   plotGrid(gx, gy, g0, 'Nearest')
   plotGrid(gx, gy, g1, 'Linear')
   plotGrid(gx, gy, g2, 'Cubic')

   plt.show()

if __name__ == '__main__':
   main()

期望

上面的代码为每种栅格类型创建一个三维绘图:真、最近、线性和立方。你知道吗

在“真”和“最近”绘图中,曲面网格根据该数据的高度渲染为预期颜色。你知道吗

在“线性”和“立方”绘图中,曲面网格仅渲染为最低值颜色(对于“光谱”cmap,该颜色为洋红色)。我想这些绘图显示像前两个绘图一样的颜色范围。你知道吗

我没有足够的声誉来发布图片,但是这里有一个link to an album包含所有4个情节。你知道吗


Tags: 数据import网格绘图颜色plt线性ax