【问题标题】:Correlate a Radial Distance to a 2D mgrid on python将径向距离与 python 上的 2D mgrid 相关联
【发布时间】:2015-04-21 22:13:18
【问题描述】:

我有两个一维数组。一个包含温度和另一个径向距离(对于每个相应的温度)。我想使用此信息生成热图类型图。 这是我遇到问题的地方: 1. 如果我创建一个 2d numpy 网格,我如何将径向距离与每个网格关联起来?说径向距离是 5 个单位,我如何找到距离中心 5 个单位的所有网格正方形? 2.然后我如何将每个温度与它各自的一组网格点相关联。所以说在径向距离 5 处温度为 20 度,我该如何表达,因为它在以下一组 x,y 网格正方形处为 20 度?

感谢您的帮助。

【问题讨论】:

    标签: numpy plot grid radial


    【解决方案1】:

    meshgrid 是你的朋友。首先设置网格加上xy 坐标网格(你会有两个5×5的数组):

    import numpy as np
    x, y = np.meshgrid(np.arange(-2, 3), np.arange(-2, 3))
    heatmap = 0 * x  # easy way to get shape right
    

    现在,伪造一些数据:

    r = np.array((0, 0.5, 1.5, 2.5))  # Your radial distance
    T = np.array((100, 90, 70, 40))   # Your temperature at distance
    

    从内向外叠加数据,从中间开始(假设r单调递增):

    r2 = r**2
    xy2 = x**2 + y**2
    for ii in range(r.size):
       heatmap[np.where(xy2 >= r2[ii])] = T[ii]
    

    就是这样。这是生成的热图:

    array([[ 40,  70,  70,  70,  40],
           [ 70,  90,  90,  90,  70],
           [ 70,  90, 100,  90,  70],
           [ 70,  90,  90,  90,  70],
           [ 40,  70,  70,  70,  40]])
    

    【讨论】:

    • 嗨,我用我的实际数据试过了。我应该提一下,我的实际数据有包含更多条目的数组(接近 2000 左右)。但无论如何。我使用 plt.contourf(heatmap) 进行绘图,它生成的图像只是一个蓝色方块。我可能做错了什么?我唯一改变的是 r 和 T,PROFILER/T 只是前面代码中的函数 r = PROFILER(1.3,4.3e13) T = PROFILET(1.3,4.3e13) plt.contourf(heatmap, 100) plt.显示()
    • @Gabrielle:您是否尝试过“假”数据并得到与我相同的结果?我假设您将 r 值从低到高排序,所以如果它们是随机的,您将不得不做一些更复杂的事情,比如对两个数组进行排序。
    • 是的,我尝试使用假数据,得到的结果与您相同。对于我的真实数据,幸运的是 r 是按升序排列的,所以这不是问题。当我将 1890 个元素长数组与示例代码中使用的 4 个元素长数组放入数组时,我得到了一个除中心外全为零的输出热图,其中的值奇怪的是 15。
    • 另外,当我执行代码时,我必须在最后一行排除“where”这个词。
    • 好的,您的heatmap 的大小是否与径向距离范围相匹配?您可能需要缩放 r,例如,如果您的径向距离达到 1000(某个单位),但您希望 heatmap 为 256 x 256(这里只是猜测数字)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多