在 Python 中绘制围绕原点径向对称的一维数据集

Plotting 1-D dataset with radial symmetry around the origin in Python

这可能是一个非常基本的问题,但我的 python 知识有限,我在解读其他问题和答案时遇到了一些困难,所以我希望这里有人可以提供帮助...
我有一组一维数据点(本质上是沿半径的每个点的分子数),我想将其绘制为二维径向对称图像。我想围绕原点 (0,0) 旋转它。 基本上,我有类似 但我想要像

这样的东西

我已经看到使用函数或定义的向量(即使用 scipy 的插值模块)相对容易地完成此操作,但我没有函数或随机生成的数据 - 我有列表。我知道一定有一种简单的方法可以做到这一点,但如果有人能指出正确的方向,我将不胜感激!

我提供了一个非常非常小的示例数据集(以对数比例绘制成一条线)供人们玩,如果他们愿意的话:

import numpy as np
import matplotlib.pyplot as plt

rad25 = np.array([25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1])
O_rad25 = np.array([1.01E+15,3.00E+14,1.20E+14,5.63E+13,2.90E+13,1.59E+13,9.21E+12,5.53E+12,3.43E+12,2.18E+12,1.42E+12,9.44E+11,6.38E+11,4.37E+11,3.03E+11,2.13E+11,1.51E+11,1.08E+11,7.77E+10,5.60E+10,4.02E+10,2.84E+10,1.94E+10,1.20E+10,5.78E+09])

plt.plot(rad25,O_rad25)
plt.yscale('log')
plt.xlabel('Radius (distance from center in um)')
plt.ylabel('Number of molecules')
plt.show()

您需要创建一个 0 - 360 度的值数组,然后从这个数组和您的值数组创建一个网格。然后可以将其绘制在径向投影的子图上。

类似这样,但包含您的原因数据:

import numpy as np

import matplotlib.pyplot as plt

# Swap out with your data
radialVals = np.linspace(0,1)

azm = np.linspace(0, 2 * np.pi)
r, th = np.meshgrid(radialVals, azm)
z = (r ** 2.0) / 4.0

plt.subplot(projection="polar")

plt.pcolormesh(th, r, z)

plt.plot(azm, r, ls='none') 
plt.grid()

plt.show()

我从 Jon 的回答中借用了一些内容(他的答案几乎是正确的),并添加了一个颜色条来说明,但这应该可以满足您的需求。由于您知道半径并且数据具有径向对称性,因此极坐标图是自然的选择。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors


fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))

azm = np.linspace(0, 2 * np.pi)
r, th = np.meshgrid(rad25, azm)
z = np.tile(O_rad25, (r.shape[0], 1))

plt.pcolormesh(th, r, z, norm=colors.LogNorm(O_rad25.min(), O_rad25.max()))
plt.colorbar(label='Number of Molecules')