Python/Matplotlib 极坐标图多边形反向填充

4

目前我有以下脚本,用于生成方位角/半径数据的极坐标图。"R1"只是一个由ArcGIS表中的[方位角,倾角]值列表派生而来的值列表。

import matplotlib.pyplot as plt
import numpy as np 

for(a,r) in R1:
    angles.append(a)
    radius.append(90-r)
theta = np.radians(angles)
r = radius

ax = plt.subplot(111,polar=True)
ax.plot(theta, r, color='black', ls='-', linewidth=1)
ax.fill(theta,r,'0.75') ## should I use ax.fill_betweenx() ?
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
ax.set_rmax(90)
ax.set_rmin(0)
ax.set_yticks(range(0,90,10))
yLabel=['90','','','60','','','30','','','']
ax.set_yticklabels(yLabel)
ax.grid(True)
plt.show()

目前,这将创建以下绘图:

输入图像描述

如何“反转”填充,使灰色部分变为白色,白色部分变为灰色?

我尝试了ax.fill_betweenx(theta,90,r,color='0.75'),但没有成功。我已经花了一些时间与此作斗争,但都无济于事。

非常感谢任何帮助或建议!

如果有任何方法可以使此更清晰,请在评论中让我知道。


根据您对此的其他操作,将背景补丁设置为灰色,填充为白色。 - tacaswell
1
最好使用合成数据,你可以用 theta = np.linspace(0, 2*np.pi, 100)r = 2 + np.sin(theta) 来演示。 - tacaswell
此外,使用 set_yticklabels 是危险的,应该避免使用。 - tacaswell
@tcaswell:你有什么推荐替代set_yticklabels的方法吗?我会记住数据引用的方式,以备将来之需。对于matplotlib我还是个新手。谢谢! - Spatial Pariah
我不太确定你想做什么,但我认为使用函数格式化程序设置标签为(r - 90)可能有点奇怪,但比使用set_yticklabels要好一些。为了看到危险,请更改r限制或刻度位置。标签将完全与数据脱钩。 - tacaswell
1个回答

3

根据您后续的需求,最快的方法是将背景设置为灰色,填充为白色:

import matplotlib.pyplot as plt
import numpy as np
ax = plt.subplot(111, polar=True)

theta = np.linspace(0, 2*np.pi, 100)
r = 2 + np.sin(theta * 2)
ax.patch.set_facecolor('0.5')
ax.plot(theta, r, color='black', ls='-', linewidth=1)
ax.fill(theta,r,'w')
plt.show()
plt.draw() # just to be safe!

工作得很好...我喜欢它的外观。谢谢! - Spatial Pariah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接