【发布时间】:2019-10-01 23:13:52
【问题描述】:
我正在尝试用 x、y 和 z(高程)绘制 2d 地形图。我按照以下链接中的步骤进行操作,但情节很奇怪。
Python : 2d contour plot from 3 lists : x, y and rho?
我花了将近半天的时间搜索,但一无所获。
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate
# import data:
import xlrd
loc = "~/Desktop/Book4.xlsx"
wb = xlrd.open_workbook(loc)
sheet = wb.sheet_by_index(0)
sample=500
# Generate array:
x=np.array(sheet.col_values(0))[0:sample]
y=np.array(sheet.col_values(1))[0:sample]
z=np.hamming(sample)[0:sample][:,None]
# Set up a regular grid of interpolation points
xi, yi = np.meshgrid(x, y)
# Interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='cubic')
zi = rbf(xi, yi)
# Plot
plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower',
extent=[x.min(), x.max(), y.min(), y.max()])
plt.colorbar()
plt.show()
任何帮助将不胜感激
【问题讨论】:
-
如果您有 x、y、z 列,您可以使用 plt.tricontourf?
-
您的数据文件只有 2 列,x 和 y 位置。但是你需要一些值来插值......听起来你期待海拔?某处是否有更多数据? (相关:我不明白汉明窗的用途。)
-
@kwinkunks 我将从另一个来源获得海拔高度,现在我只是使用汉明窗模拟海拔值。无论在这两种情况下,我的高程输入都是与其他两个相同长度的一维向量。
-
@DerekEden plt.tricontourf 给出了我没有针对的奇怪的三角图。我是第二张图片中生成的扩散图。如果我做 x,y 的普通散点图,我会得到第二个图的形状,但没有密度着色。
-
我认为问题在于,由于点的顺序,您并没有真正模拟任何有意义的事情。所以结果一点也不平滑,插值也不起作用(它最终得到一个奇异矩阵)。您可以通过使用插值器中的
smooth参数来放宽插值通过所有数据点的条件。我将发布一个示例。
标签: python matplotlib plot contourf