使用 numpy 外推等值线图



我有数据,这些数据以 1 毫米为增量沿圆的直径获取,即从 90 度开始,到 270 度结束。我想以每 1 毫米的增量推断数据以填充圆的其余部分(在该径向点处)。例如:

10 毫米圆形:

>Distance along diameter (mm)     Value (a.u.)  
>1                 208  
>5                 210  (centre `(0,0)`)  
>7                 209  
>10                208

现在我想要类似的东西:这张图片。右侧有一个图例/键,数据是外推的,因此径向数据点之间的过渡是"平滑的"。显然,实际上只需要一个值半径,但我希望直径中值的另一半来加强在第一个半径中观察到的值。

因此,我希望底部半径的值与沿直径从 180 度到 0 度的顶部半径值"混合"。这清楚吗?

我的初始(可怕):

import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('data.txt',delimiter=',')
r = data[:,][:,0]
values = data[:,][:,1]
theta = np.zeros(len(data))
r, theta = np.meshgrid(r, theta)    
plt.figure()
fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
ax.contourf(theta, r, values)
plt.show()

我知道ax.contourf的输入必须是 2D 数组。但是,我的数据没有真正的θ值。我只想要一系列同心圆,所以我修改了我的数据为:

80,0,208.1790755
80,90,208.1790755
80,180,208.1790755
80,270,208.1790755
79,0,208.1322654
79,90,208.1322654
79,180,208.1322654
79,270,208.1322654
76,0,208.1804241
76,90,208.1804241
76,180,208.1804241
76,270,208.1804241
etc

不过,我不明白为什么以下内容不起作用:

data = np.genfromtxt('data.txt',delimiter=',')
r = data[:,][:,0]
values = np.array(data[:,][:,2])
theta = np.radians(data[:,][:,1])
r, theta = np.meshgrid(r, theta)
fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
ax.contourf(theta, r, values)
plt.show()

原因是ax.contourf(x, y, z)只接受 2D 数组作为zr数组的形式已经正确,因此values_2d = values*r/r将您的值放入一个 2D 数组中,该数组可以作为ax.contourf(theta, r, values_2d, 40)传递给ax.contourf()40定义了数据的分辨率,即z数据的最小值和最大值之间的 40 个离散步长。

最新更新