项目场景:
在我们使用matplotlib绘制饼图的时候无法正常显示颜色条问题描述:
执行
import matplotlib.cm as cm
import matplotlib as mp1
import matplotlib.pyplot as plt
mp1.rcParams["font.sans-serif"]=["SimHei"]
mp1.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(10,8), dpi=100)
labels = "A难度","B难度","C难度","D难度","E难度"
students = [0.25,0.10,0.20,0.30,0.15]
colors = ["lightskyblue","palegreen","mediumpurple","tomato","summer"]
explode = [0.0,0.1,0.0,0.0,0.0]
plt.pie(students,labels=labels,explode=explode,autopct="%3.1f%%",startangle=45,colors=cm.ScalarMappable().to_rgba(students),shadow=True)
plt.title("不同难度试卷的学生占比")
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=0.1,vmax=0.3))
plt.colorbar(sm)
plt.show()
错误类型:
TypeError: You must first set_array for mappable
无法显示颜色条:
原因分析:
由于不同的python版本和matplotlib的版本导致的
解决方案:
set_array()的作用:处理将数据值数组映射到RGB
import matplotlib.cm as cm
import matplotlib as mp1
import matplotlib.pyplot as plt
mp1.rcParams["font.sans-serif"]=["SimHei"]
mp1.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(10,8), dpi=100)
labels = "A难度","B难度","C难度","D难度","E难度"
students = [0.25,0.10,0.20,0.30,0.15]
colors = ["lightskyblue","palegreen","mediumpurple","tomato","summer"]
explode = [0.0,0.1,0.0,0.0,0.0]
plt.pie(students,labels=labels,explode=explode,autopct="%3.1f%%",startangle=45,colors=cm.ScalarMappable().to_rgba(students),shadow=True)
plt.title("不同难度试卷的学生占比")
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=0.1,vmax=0.3))
sm.set_array([])#加入这行
plt.colorbar(sm)
plt.show()
正常显示的图片如下: