【问题标题】:Matplotlib - contour plotMatplotlib - 等高线图
【发布时间】:2018-05-04 06:49:34
【问题描述】:

我在 matplotlib 中的等高线图上有点挣扎。我已阅读说明和示例,但似乎无法弄清楚我需要做什么。

我有 x、y、z 数据。数据基本如下:

x    y    z
1.1  2.1  0
0.9  3.2  1
2.6  4.1  0
3.1  1.1  1
0.3  0.9  1
...

这是一个很长的 x-y 坐标列表,每个点都是 0-1。用例是球(1),罢工(0)穿过棒球的好球区。当我使用 plt.hexbin 绘制数据时,您会看到以下内容:

我想要做的是在 50% 线处绘制轮廓。如下图所示:

我希望使用轮廓,但我不清楚如何获取数据是一种足够的格式来绘制轮廓图并使用“级别”来绘制 50% 的轮廓。显然函数contour(X,Y,Z) 需要二维数组,所以根据我拥有的数据,我不清楚我到底需要做什么。

有没有一种方法可以将我拥有的数据放入一个函数中以获得我想要的等高线图,就像使用 hexbin 一样?

【问题讨论】:

    标签: python matplotlib contour


    【解决方案1】:

    首先你需要从你的 x 和 y 数据创建一个网格:

    X,Y = np.meshgrid(data[:,0], data[:,1])
    

    然后你可以插入z网格:

    # Choose one option
    # Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='nearest')
     Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='linear')
    # Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='cubic')
    

    并使用指定级别为 0.5 的等高线绘制数据:

    levels = 0.5
    contour(X,Y,Z,levels)
    

    让我知道这种方法是否适合您。

    【讨论】:

    • 超级 - 这是非常清晰和有用的答案。我现在就试试。
    • 我做了一个小修改以与您的变量名称保持一致。
    • 对不起 - 一个澄清的问题。你能解释一下func(...) 行吗?我认为这是我自己定制的函数,用于跨 z 网格进行插值,而不是标准的 python 函数
    • 对不起 Axel ...你能澄清一下data 是什么吗?这是我想要绘制的实际数据吗,即我的示例中 Z 的平均值
    • 我删除了 func 行。为 griddata 函数创建一个元组就足够了。
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2014-02-04
    • 2021-06-14
    • 2017-02-15
    相关资源
    最近更新 更多