jmg*_*ido 5 python python-3.x polar-coordinates imshow
我有磁盘模拟数据和 .dat 文件中的快照。我只想绘制一个但在极坐标中。
我有:
rho = np.fromfile(filename).reshape(128,384)
plt.imshow(np.log10(rho),origin='lower',cmap="Oranges",aspect='auto')
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
忽略颜色和 cmap。它们不是同一个模拟。仅寻找圆盘形式。
为了帮助确定这个答案,我将首先制作一个数据生成器。
import numpy as np
from matplotlib import pyplot as plt
def make_r_theta_vals():
thetas_radians = np.arange(0,2.01*np.pi,np.pi/100.)
radii = np.arange(0,101,1)
#meshgrid these to make a fuller array
tr,rr = np.meshgrid(thetas_radians,radii)
#generate fake z values
z_vals = (75. * rr**(1./2.2)\
+ 50.*np.random.normal()*np.sin(tr) \
+ 20. * np.cos(tr) * np.sqrt(rr) \
+ np.cos(rr * np.pi / 100.) * np.sin(rr * np.pi/50.) * 6.)\
* (np.sin(rr * np.pi/ 100.)**3. + 0.85)
return thetas_radians, radii, z_vals
Run Code Online (Sandbox Code Playgroud)
这里,z_vals是一个NxM数组,其中N和M是 r 和 theta 值的长度。在你的问题中,这对应于rho,但我想概括这个答案。
我们可以看到这产生了一个与原始情节类似的情节,
def make_cartesian_plot():
plt.clf()
fig = plt.figure(figsize=[5,2])
ax = fig.add_axes([0.15,0.18,0.8,0.8])
thetas_radians, radii, z = make_r_theta_vals()
ax.imshow(z,origin='lower',extent=[np.degrees(thetas_radians[0]),
np.degrees(thetas_radians[-1]),
radii[0],radii[-1]])
plt.savefig('cartesian.png')
Run Code Online (Sandbox Code Playgroud)
输出为
为了在极坐标中进行这项工作,我们将使用pcolormesh以及已知的 r 和 theta 值。如果您没有这些,您将需要生成它们,类似于我在第一个代码片段中生成它们的方式。然后,这相当简单:
def make_polar_plot():
plt.clf()
fig = plt.figure(figsize=[5,5])
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)
thetas_radians, radii, z = make_r_theta_vals()
ax.pcolormesh(thetas_radians,radii,z,edgecolors='face')
#ec='face' to avoid annoying gridding in pdf
plt.savefig('polar.png')
Run Code Online (Sandbox Code Playgroud)
其产生:
为了简单起见,省略了装饰性选择(例如删除刻度标签)。
相反,所提出的问题描绘了绘制在矩形网格上的极盘。假设这是所需的输出,我们将r, theta,转换z为x, y, z。在这里,我们再次使用了meshgrid有用的x和来处理绘图。ypcolormesh
def make_cartepolar_plot():
plt.clf()
fig = plt.figure(figsize=[5,5])
ax = fig.add_axes([0.15,0.15,0.8,0.8])
thetas_radians, radii, z = make_r_theta_vals()
tr,rr = np.meshgrid(thetas_radians,radii)
x_vals = rr * np.cos(tr)
y_vals = rr * np.sin(tr)
ax.pcolormesh(x_vals,y_vals,z,edgecolors='face')
#ec='face' to avoid annoying gridding in pdf
plt.savefig('carte_polar.png')
Run Code Online (Sandbox Code Playgroud)
这里,输出是
请注意,对于更复杂的数据集,您可能需要查看上一个问题。
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |