你好,我刚开始学编程,尝试做一些可能很明显但我却想不出来的事情。我有一系列的x、y、z数据(在我的情况下,对应距离、深度和pH值)。我想使用matplotlib在xy(距离、深度)网格上绘制z数据(pH值)的等值线图。是否有任何方法可以实现?谢谢。
你好,我刚开始学编程,尝试做一些可能很明显但我却想不出来的事情。我有一系列的x、y、z数据(在我的情况下,对应距离、深度和pH值)。我想使用matplotlib在xy(距离、深度)网格上绘制z数据(pH值)的等值线图。是否有任何方法可以实现?谢谢。
解决方案将取决于数据的组织方式。
如果x
和y
数据已经定义了一个网格,它们可以很容易地被重新整形成四边形网格。例如:
#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)
代码
- Hg1#y = dataset(:,2); #z = dataset(:,3); #[xx,yy]=meshgrid(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 '我的图标题' - Hg1