在 matplotlib 中将一些值绘制到极坐标图
Posted
技术标签:
【中文标题】在 matplotlib 中将一些值绘制到极坐标图【英文标题】:Plotting some values to a polar graph in matplotlib 【发布时间】:2012-10-08 19:50:35 【问题描述】:我想用 Python 和 matplotlib 将一些表示可见卫星的值绘制成极坐标图。我在matplotlib示例之后编写了一些代码,并表示了极坐标图,但未绘制给定点:
import matplotlib
from matplotlib.pyplot import figure, show, rc, grid
from math import pi
# radar green, solid grid lines
rc('grid', color='#316931', linewidth=1, linestyle='-')
rc('xtick', labelsize=15)
rc('ytick', labelsize=15)
# force square figure and square axes looks better for polar, IMO
width, height = matplotlib.rcParams['figure.figsize']
size = min(width, height)
# make a square figure
fig = figure(figsize=(size, size))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')
# Satellite info [PRN, E, Az, Ss, Used (1 yes, 0 no)]
sat = [ [1, 62, 255, 46, 1],
[14, 62, 26, 46, 1],
[31, 42, 158, 36, 1],
[22, 40, 76, 50, 1],
[11, 29, 308, 0, 0],
[19, 26, 243, 36, 1],
[3, 13, 217, 0, 0],
[18, 10, 93, 0, 0],
[20, 6, 291, 0, 0],
[5, 1, 72, 0, 0],
[122, 43, 216, 0, 0],
[135, 47, 203, 43, 0] ]
for index in (0, len(sat)-1):
if(sat[index][4]>0):
ax.plot(sat[index][2], sat[index][1], color='green', marker='s', markersize=12)
else:
ax.plot(sat[index][2], sat[index][1], color='gray', marker='s', markersize=12)
ax.set_rmax(2.0)
grid(True)
ax.set_title("Visible satellites", fontsize=20)
show()
我做错了什么?
【问题讨论】:
【参考方案1】:像这样迭代你的 sats 列表更简单:
for s in sat:
if(s[4]>0):
ax.plot(s[2], s[1],color='green', marker='s', markersize=5)
else:
ax.plot(s[2], s[1],color='gray', marker='s', markersize=5)
除此之外,您还使用 set_rmax 将方位角限制为
编辑: 直接解包列表可能会进一步提高可读性:
for (PRN, E, Az, Ss, Used) in sat:
if(Used>0):
ax.plot(Ss, Az,color='green', marker='s', markersize=5)
else:
ax.plot(Ss, Az,color='gray', marker='s', markersize=5)
【讨论】:
我喜欢直接拆包。我不知道 Python 有什么可能!谢谢! :) 问题出在你所说的 set_rmax 上。我还有一个额外的疑问:是否可以为每个表示的点添加标签? 当然,你可以调用斧头上的 .text 方法,因为上面的代码会变成:for (PRN, E, Az, Ss, Used) in sat: if(Used>0): ax.plot(Ss, Az,color='green', marker='s', markersize=5) else: ax.plot(Ss, Az,color='gray', marker='s', markersize=5) ax.text(Ss, Az, PRN, color='red', size=15)
【参考方案2】:
在这一行:
for index in (0, len(sat)-1):
index 只运行在一对值上。您是指for index in range(0, len(sat))
的范围吗?
【讨论】:
以上是关于在 matplotlib 中将一些值绘制到极坐标图的主要内容,如果未能解决你的问题,请参考以下文章
Python matplotlib绘制条形柱状图并添加数据标签
在 python matplotlib 中绘制 (x, y) 坐标列表