运行极坐标绘图代码报错:No module named 'basic_units'
解决ModuleNotFoundError: No module named 'basic_units'问题
问题原因
basic_units不是Python标准库,也不是Matplotlib的正式内置模块——它只是Matplotlib官方示例里用来演示单位功能的自定义演示模块,所以直接导入会找不到。
解决办法
方案1:简化代码(推荐,无需额外模块)
极坐标图默认就是以弧度为单位的,完全不需要额外导入单位模块。去掉相关代码即可正常运行:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) # 极坐标默认用弧度,直接传数值就行 ax.plot([np.pi, np.pi], [0, 10]) plt.show()
方案2:手动添加basic_units模块
如果你非要用原代码里的单位功能,可以把Matplotlib示例中的basic_units.py内容复制出来,保存到你的代码同一目录下:
import numpy as np from matplotlib.cbook import iterable class Unit: def __init__(self, units): self.units = units def __repr__(self): return self.units class Quantity(np.ndarray): def __new__(cls, value, units=""): obj = np.asarray(value).view(cls) obj.units = Unit(units) return obj def __array_finalize__(self, obj): if obj is None: return self.units = getattr(obj, 'units', Unit("")) def __array_wrap__(self, out_arr, context=None): ret = np.ndarray.__array_wrap__(self, out_arr, context) ret.units = self.units return ret def radians(x): return Quantity(x, "radians")
保存后再运行你的原代码,就能正常导入radians了。
方案3:用专业单位库替代
如果需要更完善的单位处理功能,推荐用成熟的第三方库pint:
- 先安装库:
pip install pint
- 修改代码使用pint:
import numpy as np import matplotlib.pyplot as plt from pint import UnitRegistry ureg = UnitRegistry() radians = ureg.radian fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}) ax.plot([np.pi*radians, np.pi*radians], [0, 10]) plt.show()
内容的提问来源于stack exchange,提问作者thedanielcer
相关产品推荐
相关产品推荐

