给定r,theta和z值的Python极坐标直方图

时间:2019-03-08 13:36:00

标签: python matplotlib polar-coordinates

我有一个数据框,其中包含一个特定磁力计站随时间的测量结果,列对应于:

  • 它的纬度(我认为是半径)
  • 其方位角
  • 在此特定时间的测量数量

我想知道一种将该数据帧绘制为被测变量的极坐标直方图的方法:即类似这样的东西:

Shi et al, 2018, doi:10.1029/2017JA025033

我已经看过physt中的特殊直方图,但是这只允许我输入x,y值,这让我很困惑。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

这似乎是您要查找的内容:ConnectedServer

from physt import histogram, binnings, special
import numpy as np
import matplotlib.pyplot as plt

# Generate some points in the Cartesian coordinates
np.random.seed(42)

x = np.random.rand(1000)
y = np.random.rand(1000)
z = np.random.rand(1000)

# Create a polar histogram with default parameters
hist = special.polar_histogram(x, y)
ax = hist.plot.polar_map()

https://physt.readthedocs.io/en/latest/special_histograms.html#Polar-histogram

链接的文档包括更多有关颜色,垃圾箱大小等的示例。

编辑:我认为这需要一些调整才能使您的数据保持正确的形状,但是我认为该示例说明了库的功能,可以根据您的用例进行调整:

import random
import numpy as np
import matplotlib.pyplot as plt
from physt import special

# Generate some points in the Cartesian coordinates
np.random.seed(42)

gen = lambda l, h, s = 3000: np.asarray([random.random() * (h - l) + l for _ in range(s)])

X = gen(-100, 100)
Y = gen(-1000, 1000)
Z = gen(0, 1400)

hist = special.polar_histogram(X, Y, weights=Z, radial_bins=40)
# ax = hist.plot.polar_map()

hist.plot.polar_map(density=True, show_zero=False, cmap="inferno", lw=0.5, figsize=(5, 5))
plt.show()

Polar histogram created with physt

答案 1 :(得分:1)

使用numpy.histogram2d可以轻松完成直方图的计算。可以使用matplotlib的pcolormesh绘制结果2D数组。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

# two input arrays
azimut = np.random.rand(3000)*2*np.pi
radius = np.random.rayleigh(29, size=3000)

# define binning
rbins = np.linspace(0,radius.max(), 30)
abins = np.linspace(0,2*np.pi, 60)

#calculate histogram
hist, _, _ = np.histogram2d(azimut, radius, bins=(abins, rbins))
A, R = np.meshgrid(abins, rbins)

# plot
fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))

pc = ax.pcolormesh(A, R, hist.T, cmap="magma_r")
fig.colorbar(pc)

plt.show()

enter image description here

答案 2 :(得分:0)

这不是完整的答案,但是您可以发现一些想法: https://github.com/TronSkywalker/Visuals/blob/master/Circular_bar_charts.py

让我知道你走了多远!:)