簡體   English   中英

二維密度 Plot 與 XYZ 數據

[英]2D Density Plot with X Y Z data

我正在嘗試 plot 2d 地形 map 與 x、y 和 z(海拔)。 我按照以下鏈接中的步驟操作,但我變得非常奇怪 plot。

Python:二維輪廓 plot 來自 3 個列表:x、y 和 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()

下面的第一個是我得到的,最后一個是它應該是什么樣子。 這就是我得到的 這就是它的樣子

任何幫助將不勝感激

鏈接到數據文件

我認為問題在於您提供的數據不夠平滑,無法使用默認參數進行插值。 這是一種方法,使用mgrid代替meshgrid

import numpy as np
import pandas as pd
from scipy.interpolate import Rbf

# fname is your data, but as a CSV file.
data = pd.read_csv(fname).values
x, y = data.T

x_min, x_max = np.amin(x), np.amax(x)
y_min, y_max = np.amin(y), np.amax(y)

# Make a grid with spacing 0.002.
grid_x, grid_y = np.mgrid[x_min:x_max:0.002, y_min:y_max:0.002]

# Make up a Z.
z = np.hamming(x.size)

# Make an n-dimensional interpolator.
rbfi = Rbf(x, y, z, smooth=2)

# Predict on the regular grid.
di = rbfi(grid_x, grid_y)

然后你可以看看結果:

import matplotlib.pyplot as plt

plt.imshow(di)

我得到:

插值的結果

我最近寫了一個關於這個主題的 Jupyter Notebook ,檢查一下其他的插值方法,比如克里金法和樣條擬合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM