You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行极坐标绘图代码报错: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:

  1. 先安装库:
pip install pint
  1. 修改代码使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:10:31