1问题描述
Traceback (most recent call last):
File "D:\pycharm\projects\1-可视化学习\8.3更改小提琴图的中位数、均值、颜色等.py", line 8, in <module>
violin_parts = plt.violinplot(data, showmedians=True, showmeans=True)
^^^^
NameError: name 'data' is not defined
2代码详情
# 导入相关库
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
plt.figure(dpi=120)
# 绘制小提琴图,data是数据源,showmedians和showmeans参数分别控制是否显示中位数和均值线
violin_parts = plt.violinplot(data, showmedians=True, showmeans=True)
# 获取小提琴图的中位数线,并设置其边缘颜色为红色
vmedian = violin_parts['cmedians']
vmedian.set_edgecolor('r')
# 获取小提琴图的均值线,并设置其边缘颜色为黑色
vmean = violin_parts['cmeans']
vmean.set_edgecolor('k')
# 获取小提琴图的箱体部分(即除去尾部的曲线部分),并设置其边缘颜色为黑色
vbars = violin_parts['cbars']
vbars.set_edgecolor('k')
# 获取小提琴图的最大值线(即箱体上边缘),并设置其边缘颜色为深橙色
vmax = violin_parts['cmaxes']
vmax.set_edgecolor('darkorange')
# 获取小提琴图的最小值线(即箱体下边缘),并设置其边缘颜色为深橙色
vmin = violin_parts['cmins']
vmin.set_edgecolor('darkorange')
# 显示图形窗口,此时会弹出一个窗口显示绘制的小提琴图
plt.show()
3问题剖析
NameError
在 Python 中是一个异常类型,它表示尝试访问一个未被定义或不可访问的变量名。当 Python 解释器在尝试查找一个变量或函数名时,如果在当前的符号表(即名称空间)中找不到这个名字,就会抛出 NameError
异常。
1.变量未定义:如果你尝试使用一个尚未被赋值的变量,就会触发 NameError
。
print(x) # NameError: name 'x' is not defined
2.拼写错误:如果你尝试访问的变量名拼写错误,也会导致 NameError
。
y = 10
print(y1) # NameError: name 'y1' is not defined
3.作用域问题:如果变量在尝试访问它的作用域之外定义,也会引发 NameError
。
def func():
z = 20
func()
print(z) # NameError: name 'z' is not defined
4.导入错误:当尝试从模块中导入不存在的对象时,也会引发 NameError
。
from some_module import non_existent_object
# NameError: name 'non_existent_object' is not defined in module 'some_module'
4问题解决
- 确保变量在使用前已经被定义和赋值。
- 检查变量名的拼写是否正确。
- 确保你正在访问的变量在当前的作用域内是可访问的。
- 如果从模块导入,请确保模块中确实存在你想导入的对象。
5代码修改
通过检查,属于变量未定义
data = [np.random.normal(0, std, 100) for std in range(10, 14)]
5全文代码
# 导入相关库
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
data = [np.random.normal(0, std, 100) for std in range(10, 14)]
plt.figure(dpi=120)
# 绘制小提琴图,data是数据源,showmedians和showmeans参数分别控制是否显示中位数和均值线
violin_parts = plt.violinplot(data, showmedians=True, showmeans=True)
# 获取小提琴图的中位数线,并设置其边缘颜色为红色
vmedian = violin_parts['cmedians']
vmedian.set_edgecolor('r')
# 获取小提琴图的均值线,并设置其边缘颜色为黑色
vmean = violin_parts['cmeans']
vmean.set_edgecolor('k')
# 获取小提琴图的箱体部分(即除去尾部的曲线部分),并设置其边缘颜色为黑色
vbars = violin_parts['cbars']
vbars.set_edgecolor('k')
# 获取小提琴图的最大值线(即箱体上边缘),并设置其边缘颜色为深橙色
vmax = violin_parts['cmaxes']
vmax.set_edgecolor('darkorange')
# 获取小提琴图的最小值线(即箱体下边缘),并设置其边缘颜色为深橙色
vmin = violin_parts['cmins']
vmin.set_edgecolor('darkorange')
# 显示图形窗口,此时会弹出一个窗口显示绘制的小提琴图
plt.show()
图像显示为: