【问题标题】:Plotting Isolines/contours in matplotlib from (x, y, z) data set从 (x, y, z) 数据集中在 matplotlib 中绘制等值线/等值线
【发布时间】:2017-07-30 21:15:00
【问题描述】:

您好,我是编程新手,我正在尝试做一些可能非常明显的事情,但对于我的生活,我无法弄清楚。我有一系列 x、y、z 数据(在我的例子中,对应于距离、深度和 pH 值)。我想使用 matplotlib 在 xy(距离、深度)网格上绘制 z 数据(pH)的等值线。有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: python matplotlib contour


    【解决方案1】:

    解决方案将取决于数据的组织方式。

    常规网格上的数据

    如果xy 数据已经定义了一个网格,则可以轻松地将它们重新整形为四边形网格。例如

    #x  y  z
     4  1  3
     6  1  8
     8  1 -9
     4  2 10
     6  2 -1
     8  2 -8
     4  3  8
     6  3 -9
     8  3  0
     4  4 -1
     6  4 -8
     8  4  8 
    

    可以使用

    绘制为contour
    import matplotlib.pyplot as plt
    import numpy as np
    x,y,z = np.loadtxt("data.txt", unpack=True)
    plt.contour(x.reshape(4,3), y.reshape(4,3), z.reshape(4,3))
    

    任意数据

    (a) 如果数据不在四边形网格上,可以在网格上插入数据。 matplotlib 本身提供了一种方法,使用matplotlib.mlab.griddata

    import matplotlib.mlab
    xi = np.linspace(4, 8, 10)
    yi = np.linspace(1, 4, 10)
    zi = matplotlib.mlab.griddata(x, y, z, xi, yi, interp='linear')
    plt.contour(xi, yi, zi)
    

    (b) 最后,无需使用四边形网格即可完全绘制轮廓。这可以使用tricontour 来完成。

    plt.tricontour(x,y,z)
    

    matplotlib page 上可以找到比较后两种方法的示例。

    【讨论】:

    • 谢谢!我还找到了一种在 matlab 中使用 tricontour 的方法(不是我的偏好,但我很绝望):link_italic_ bold code
    • 数据集 = xlsread (dataset.xlsx','Sheet2','B1:D10'); #each new '#' is a new line in matlab bc I can't get this comment to format# #x = dataset(:,1); #y = 数据集(:,2); #z = 数据集(:,3); #[xx,yy]=网格网格(x,y); #zz=griddata(x,y,z,xx,yy); % 将 z 散射数据与 xy 网格相关联 #v=3:0.5:7; % 等高线水平:最低:步长间隔:最高 #idx=randperm(numel(zz)); #n=idx(1:ceil(numel(zz)/2))'; #x=xx(n); #y=yy(n); #z=zz(n); #tri=delaunay(x,y); #subplot(1,1,1) #[C,h]=tricontour(tri,x,y,z,v); #clabel(C) #title '我的人物标题'
    • 您不应该将扩展代码发布到评论中,顺便说一句,这与问题完全无关(这是关于 matplotlib,而不是 matlab)。如果以上答案解决了你的问题,你应该accept它。如果没有,您应该编辑您的问题并明确您缺少哪些进一步的信息。
    • 抱歉,我不知道不在 cmets 中发布代码。我问了最初的问题并选择了一个程序来询问以避免混淆。然而,由于我在尝试做如此基本的事情时遇到了很多麻烦,我认为其他人可能有同样的问题,无论是在 matlab 还是 matplotlib 中,所以如果有人找到这个线程,他们可能会喜欢两种方法来做同样的事情,具体取决于在他们更喜欢的节目上。我非常感谢这个答案!我将比较两者,看看哪一个更能代表系统。
    猜你喜欢
    • 1970-01-01
    • 2022-01-18
    • 2019-03-26
    • 1970-01-01
    • 2010-12-06
    • 2019-04-22
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多