Matplotlib:极坐标图中set_rscale('log')设置无效问题排查
解决Matplotlib 3.3.4对数极坐标图的posx/posy错误问题
我之前在Matplotlib 3.3.x版本里碰到过完全一样的问题,这个错误是因为该版本对数极坐标的刻度生成逻辑有bug——当你的半径范围(1到2)比较窄时,自动生成的对数刻度会出现非有限值,导致绘图时坐标计算失败,调换set_rlim和set_rscale的顺序也没法解决这个底层逻辑问题。
下面给你两个可行的解决方案:
方案一:手动指定半径刻度(适配3.3.4版本)
直接跳过Matplotlib自动生成无效刻度的步骤,手动设置符合你r范围的合理刻度:
import numpy as np import matplotlib.pyplot as plt r = np.arange(1, 2, 0.01) theta = 2 * np.pi * r fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) ax.plot(theta, r) # 先设置对数刻度类型 ax.set_rscale('log') # 手动指定在1-2范围内的对数刻度值,避免自动生成无效刻度 ax.set_yticks([1, 1.2, 1.4, 1.6, 1.8, 2]) # 锁定半径范围 ax.set_rlim((1, 2)) ax.grid(True) plt.show()
这里用set_yticks指定极坐标的半径刻度,因为在极坐标轴里,半径对应的是y轴刻度,这样就不会触发那些导致错误的自动刻度计算了。
方案二:升级Matplotlib版本
这个对数极坐标的bug在Matplotlib 3.4.0及以上版本已经被官方修复了,如果你能升级版本,原来的代码不管set_rlim和set_rscale的顺序,都能正常运行。升级命令可以用:
pip install --upgrade matplotlib>=3.4.0
内容的提问来源于stack exchange,提问作者Andrey Akhmatkhanov
相关产品推荐
相关产品推荐

