用matplotlib在极地图中遮蔽"细胞"

Man*_*ert 10 python plot matplotlib

我有一堆规则分布的点(θ= n*π/ 6,r = 1 ... 8),每个点的值都为[0,1].我可以使用matplotlib中的值来绘制它们

polar(thetas, rs, c=values)
Run Code Online (Sandbox Code Playgroud)

但是,只有一个微小的点,我想用相应的"细胞"(即所有东西,直到相邻点的中间),使用与点的值相对应的颜色:

带有阴影细胞的极地图

(注意,这里我的值只是[0,.5,1],实际上它们将是介于0和1之间的所有东西.是否有任何直接的方法来实现这个(或者足够接近的东西)matplotlib?也许它更容易把它想象成2D直方图?

fra*_*xel 13

通过将其视为极坐标堆栈条形图,可以很好地完成此操作:

import matplotlib.pyplot as plt
import numpy as np
from random import choice

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)

for i in xrange(12*8):
    color = choice(['navy','maroon','lightgreen'])
    ax.bar(i * 2 * np.pi / 12, 1, width=2 * np.pi / 12, bottom=i / 12,
           color=color, edgecolor = color)
plt.ylim(0,10)
ax.set_yticks([])
plt.show()
Run Code Online (Sandbox Code Playgroud)

生产:

在此输入图像描述


Joe*_*ton 11

当然!只需pcolormesh在极轴上使用即可.

例如

import matplotlib.pyplot as plt
import numpy as np

# Generate some data...
# Note that all of these are _2D_ arrays, so that we can use meshgrid
# You'll need to "grid" your data to use pcolormesh if it's un-ordered points
theta, r = np.mgrid[0:2*np.pi:20j, 0:1:10j]
z = np.random.random(theta.size).reshape(theta.shape)


fig, (ax1, ax2) = plt.subplots(ncols=2, subplot_kw=dict(projection='polar'))


ax1.scatter(theta.flatten(), r.flatten(), c=z.flatten())
ax1.set_title('Scattered Points')

ax2.pcolormesh(theta, r, z)
ax2.set_title('Cells')

for ax in [ax1, ax2]:
    ax.set_ylim([0, 1])
    ax.set_yticklabels([])

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果您的数据尚未在常规网格上,那么您需要将其网格化以使用pcolormesh.

不过,它看起来像你的情节中的常规网格.在这种情况下,网格化非常简单.如果它已经订购,它可能就像打电话一样简单reshape.否则,一个简单的循环或利用numpy.histogram2d您的z值作为权重将满足您的需要.