如何在Matplotlib极坐标轴中仅显示一条网格线并隐藏其余网格线?
解决极坐标图仅保留0~180°网格线的问题
要实现仅保留0~180°之间的水平网格线(极坐标中对应角向射线网格),可以通过控制极坐标的角度刻度来实现,具体方案如下:
核心思路
极坐标中,角度(theta)对应坐标轴的x轴刻度,单位为弧度(02π对应0°360°)。只需设置xticks仅包含0π(即0°180°)范围内的角度值,就能让对应的网格线显示,其他角度的网格线会自动隐藏。
基础实现代码
import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(6, 6)) ax = fig.add_subplot(111, polar=True) ax.set_yticks([]) # 隐藏径向环形网格线 # 设置0°~180°的弧度刻度(这里取5个等分点:0°,45°,90°,135°,180°) ax.set_xticks(np.linspace(0, np.pi, 5)) # 开启角向网格线,可自定义样式 ax.grid(True, axis='x', color='gray', linestyle='-') plt.show()
精细控制(保留全刻度但隐藏部分网格)
如果需要保留所有角度的刻度标签,但仅隐藏180°以外的网格线,可以遍历网格线对象单独控制可见性:
import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(6, 6)) ax = fig.add_subplot(111, polar=True) ax.set_yticks([]) # 保留0°~360°的全角度刻度 ax.set_xticks(np.linspace(0, 2*np.pi, 8)) # 遍历网格线,隐藏大于180°(π弧度)的部分 for idx, tick_val in enumerate(ax.get_xticks()): if tick_val > np.pi: ax.xaxis.get_gridlines()[idx].set_visible(False) plt.show()
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

