代码之家  ›  专栏  ›  技术社区  ›  GRquanti

从3D数据到彩色地图[重复]

  •  0
  • GRquanti  · 技术社区  · 7 年前

    前言:我看到了 these ,但我从答案中想不出该怎么做这个情节。此外,我对python和matplotlib还很陌生。

    X        Y       Z
    0.05     1       z
    0.10     1       z
    ...     ...     ...
    0.95     1       z
    0.05     2       z
    ...     ...     ...
    ...     ...     ...
    0.95    10       z
    

    其中z为[0.02:0.5]。这些结果产生190(x,y,z)个点。

    data_file = open('tau.txt', 'r')
    buffer = data_file.read()
    data_file.close()
    
    data = [map(float, row.split('\t')) for row 
            buffer.strip().split("\n")]
    

    正如链接所示,我将它们转换为网格

    mu = []
    alpha = [] 
    tau = []
    
    for elements in data:
        mu.append(elements[0])
        alpha.append(elements[1])
        tau.append(elements[2])
    
    x_data = np.asarray(mu)
    y_data = np.asarray(alpha)
    z_data = np.asarray(tau)
    
    xi = np.linspace(0.05,0.95,19)
    yi = np.linspace(1,10,10)
    ar = griddata(x_data,y_data,z_data,xi,yi,interp='nn')
    

    然后我做绘图:我希望这样,每个(x,y)坐标都有一个以坐标为中心的正方形,带有一个显示z值的色条。

    cmap = mpl.colors.LinearSegmentedColormap.from_list('my_colormap',
               ['white','grey','black'],256)
    
    img = plt.imshow(ar,interpolation='nearest',cmap = 
               cmap,origin='lower')
    
    plt.colorbar(img,cmap=cmap)
    

    this

    首先,我希望色条与情节本身的高度相同。我不明白如何避免这种垃圾。

    此外,如果查看该文件,您会立即发现范围不正确:x必须在[0.05:0.95]中,y必须在[1:10]中。y只是从1移动(所有z=0的白线应该是y=1,而不是y=0),而x假设的值我无法理解。

    我如何解决我的问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joe    7 年前

    imshow 而是用于使用与矩阵或图像大小相同的网格绘制图像和矩阵。这就是为什么你的x轴和y轴是那样的。

    对于你想做的事,使用 pcolormesh pcolor 结合numpy。网格以获得正确的x和y间距。

    This page 有一些关于它如何工作的信息。