改进Python中的等高线图

时间:2015-12-01 20:04:27

标签: python imshow

我有一个图表显示了用python制作的一小块水的不同深度,但细节不如我想要的那么好。有没有办法修改我当前的代码来绘制具有良好分辨率的区域深度图?

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
import csv 

x=[]
y=[]
z=[]   
with open('EP_Aug2015.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
        x1 = row[0]
        y1 = row[1]
        z1 = row[2]
        x.append(x1)
        y.append(y1)
        z.append(z1)

xmin=float(min(x)) 
xmax=float(max(x)) 
ymin=float(min(y))
ymax=float(max(y))
grid_x, grid_y = np.mgrid[xmin:xmax:30j, ymin:ymax:30j]
points = [[x[i], y[i]] for i in range(len(x))]
#[row[0] for row in values]
grid_z= griddata(points, z, (grid_x, grid_y), method='linear')

plt.contourf(grid_z)
plt.colorbar()
plt.show()

这就是情节的样子 enter image description here

MATLAB脚本

EPdata= csvread('EP_Aug2015.csv',1,0);

%Create x,y,z values
x=EPdata(:,1);
y=EPdata(:,2);
z=EPdata(:,3);

%Make a range of x and y data points for contour
xi=linspace(min(x),max(x),30);
yi=linspace(min(y),max(y),30);

%Mesh the x and y data
[XI YI]=meshgrid(xi,yi);

%Interpolate original data with the meshed data range
ZI=griddata(x,y,z,XI,YI);

%Contour meshed data
contourf(XI,YI,ZI)
xlabel('Easting');
ylabel('Northing');
colorbar;

enter image description here

1 个答案:

答案 0 :(得分:2)

有三件事马上就跳出来了。

  1. 您在Python版本中插入了更多值(100x100 vs 30x30)。
  2. 您在Python中使用三次插值,在MATLAB中使用线性。
  3. 您在MATLAB中使用contourf但在Python中使用imshow进行绘图,而不是在Python中使用contourf
  4. 因此,在这两种情况下,我首先使用相同的插值分辨率,相同的插值方法和相同的绘图功能。如果仍有差异,您可能需要发布或提供一些示例数据的链接,因为很难分辨。

    此外,您应该使用pandas.read_csv来加载数据。