C:\python\py\.venv\Scripts\python.exe C:\python\py\7.18.py Traceback (most recent call last): File "C:\python\py\7.18.py", line 2, in <module> plt.figure(figsize=(16, 12)) # 适当增加画布尺寸 ^^^ NameError: name 'plt' is not defined
时间: 2025-07-21 21:51:06 浏览: 27
<think>我们遇到了一个错误:NameError: name 'plt' is not defined
这是因为在修改后的树状图代码中,我们直接使用了plt,但没有导入matplotlib.pyplot。
在原始代码中,我们已经导入了matplotlib.pyplot as plt,但修改后的代码可能是在没有导入的环境中运行的。
解决方案:确保在修改后的树状图代码之前,已经正确导入matplotlib.pyplot。
我们将重新组织代码,确保在树状图代码之前有正确的导入语句。
修改后的完整树状图代码(包含导入)如下:</think>从错误信息看,问题在于代码中缺少了`matplotlib.pyplot`的导入语句。以下是修正后的完整代码:
```python
import numpy as np
import matplotlib.pyplot as plt # 确保导入matplotlib.pyplot
import squarify
from matplotlib.path import Path
import matplotlib.patches as patches
import matplotlib.colors as mcolors
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
# ================== 数据定义 ==================
# 一级指标
level1_names = ['数字化意识', '数字技术知识与技能', '数字化应用', '数字社会责任', '专业发展']
# 二级指标名称
level2_names = [
['数字化认识', '数字化意愿', '数字化意志'],
['数字技术概念', '数字技术操作', '数字工具选择'],
['数字化教学设计', '数字化教学实施', '数字化学业评价', '数字化协同育人'],
['法治道德规范', '数字安全保护'],
['数字化学习', '数字化研究', '数字创新能力']
]
# 二级指标局部权重
local_weights = [
[0.5390, 0.2973, 0.1638],
[0.1638, 0.2973, 0.5390],
[0.0960, 0.1611, 0.2771, 0.4658],
[0.3333, 0.6667],
[0.1638, 0.2973, 0.5390]
]
# 一级指标权重
level1_weights = [0.1250, 0.2147, 0.3751, 0.0741, 0.2147]
# 计算全局权重
global_weights = []
for i in range(5):
global_weights.extend(np.array(local_weights[i]) * level1_weights[i])
global_weights = np.array(global_weights)
# ================== 1. 树状图(文字放大版) ==================
plt.figure(figsize=(16, 12)) # 增加画布尺寸
# 准备树状图数据
all_weights = level1_weights.copy()
for i, weights in enumerate(local_weights):
all_weights.extend(np.array(weights) * level1_weights[i])
all_labels = level1_names.copy()
for names in level2_names:
all_labels.extend(names)
# 生成颜色映射
colors = plt.cm.tab20c(np.linspace(0, 1, len(all_labels)))
cmap = plt.get_cmap('tab20c')
level1_colors = cmap([0.05, 0.25, 0.45, 0.65, 0.85])
# 创建嵌套树状图(文字放大)
ax = plt.subplot(111)
squarify.plot(
sizes=all_weights,
label=all_labels,
color=colors,
alpha=0.8,
text_kwargs={
'fontsize': 14, # 增大字体
'fontweight': 'bold' # 加粗字体
}
)
plt.axis('off')
plt.title('高校教师数字胜任力指标权重树状图', fontsize=18) # 增大标题
plt.tight_layout()
plt.savefig('树状图_文字放大版.png', dpi=300, bbox_inches='tight')
plt.close()
print("文字放大的树状图已生成并保存为'树状图_文字放大版.png'")
```
### 错误原因分析:
1. **缺少导入**:原始代码中未导入`matplotlib.pyplot`模块(虽然其他图表中有导入,但树状图代码单独执行时缺失)
2. **变量未定义**:代码直接使用`plt`而未定义,导致`NameError`
### 修正要点:
1. 确保在代码开头添加`import matplotlib.pyplot as plt`
2. 使用`plt.figure()`创建图形前确保已导入
3. 保持其他图表代码不变(雷达图、哑铃图等),只修改树状图部分
运行此修正后的代码即可成功生成文字放大的树状图。
阅读全文
相关推荐



















