Python 饼图彩色文本matplotlib
我的任务是根据及格学生和不及格学生制作一个饼图。我想知道是否有办法改变饼图中的文字。 黑色部分被故障部分覆盖,白色部分被背景覆盖 随机输入 将matplotlib.pyplot作为plt导入Python 饼图彩色文本matplotlib,python,matplotlib,charts,Python,Matplotlib,Charts,我的任务是根据及格学生和不及格学生制作一个饼图。我想知道是否有办法改变饼图中的文字。 黑色部分被故障部分覆盖,白色部分被背景覆盖 随机输入 将matplotlib.pyplot作为plt导入 def main(): students = get_students() Student_Count = Random_Grades(students) Total = Average (Student_Count,students) Pie_Graph(Total,stu
def main():
students = get_students()
Student_Count = Random_Grades(students)
Total = Average (Student_Count,students)
Pie_Graph(Total,students)
def get_students():
students = int(input("How many students do you want to enter? \n Students: "))
while(students > 50):
print("The data size must be less than or equal to 50")
students = int(input("How many students do you want to enter? \n Students: "))
return students
def Random_Grades(students):
Student_Count = [([0] * 4) for i in range(students)]
for a in range(students):
for b in range(4):
Student_Count[a][b] = random.randint(1,100)
return Student_Count
def Average (Student_Count,students):
total = 0
Total = [] # will put the Total in final row
for a in range (students):
for b in range(4):
total += Student_Count [a][b]
Average = total/4
Total.append(Average) # will put the total value in the Total list
total = 0
return Total
def Pie_Graph(Total,students):
b = 0
c = 0
for a in range (students):
if Total[a] >= 60:
b += 1
elif Total[a] < 60:
c += 1
values=[b,c]
slice_labels=(['Pass','Fail'])
explode = [0.05,0.05]
plt.pie(values, labels=slice_labels, colors=('b','k'),autopct="%.1f%%",explode=explode,textprops={'color':"w"})
plt.title('Student Pass/Fail Chart')
plt.show()
print()
x="Y"
while(x!="N"):
main()
x=input("Press Y to continue, N to stop : ").upper()
def main():
学生=得到学生()
学生人数=随机分数(学生)
总计=平均值(学生人数,学生)
饼图(学生总数)
def get_学生():
students=int(输入(“您想输入多少名学生?\n students:”)
而(50岁以上的学生):
打印(“数据大小必须小于或等于50”)
students=int(输入(“您想输入多少名学生?\n students:”)
留学生
def随机大学成绩(学生):
学生人数=[([0]*4)对于范围内的i(学生)]
对于范围内的(学生):
对于范围(4)中的b:
学生人数[a][b]=随机数,随机数(1100)
返回学生人数
def平均值(学生人数,学生):
总数=0
总计=[]#将总计放在最后一行
对于范围内的(学生):
对于范围(4)中的b:
总数+=学生人数[a][b]
平均数=总数/4
总计。追加(平均值)#将总值放入总计列表中
总数=0
返回总数
定义饼图(总计,学生):
b=0
c=0
对于范围内的(学生):
如果总计[a]>=60:
b+=1
elif总计[a]<60:
c+=1
值=[b,c]
切片标签=(['Pass','Fail'])
爆炸=[0.05,0.05]
plt.pie(值,标签=slice_标签,颜色=('b','k'),autopct=“%.1f%%”,explode=explode,textprops={'color':“w”})
课程名称(“学生及格/不及格表”)
plt.show()
打印()
x=“Y”
而(x!=“N”):
main()
x=输入(“按Y键继续,按N键停止:”)。上限()
输出
预期产量
您只需添加一个图例即可 使用
plt.legend()
就在plt.show()之前
您还可以更改图例的位置。您可以使用自定义自动CT在piechart中呈现所需的任何字符串,您可以使用图例标记与哪个集合对应的颜色
有很多方法可以设置边框,patch.Rectangle
,或者只使用piechart的轴
def make_autopct(values):
def my_autopct(pct):
total = sum(values)
val = int(round(pct*total/100.0))
return '{p}%'.format(p=val)
return my_autopct
def Pie_Graph(Total,students):
b = 0
c = 0
for a in range (students):
if Total[a] >= 60:
b += 1
elif Total[a] < 60:
c += 1
values=[b,c]
slice_labels=(['Pass','Fail'])
explode = [0.05,0.05]
fig1, ax1 = plt.subplots(figsize=(5, 5))
fig1.subplots_adjust(0.1, 0.1, 1, 1)
b = ax1.pie(values, labels=slice_labels, colors=('b','k'),autopct= make_autopct(values),explode=explode,textprops={'color':"w"})
plt.legend(['Pass', 'Fail'], loc = 8, bbox_to_anchor=(0.5, -0.25), ncol=2, fancybox=True)
plt.title('Student Pass/Fail Chart')
ax1.axis('equal')
plt.show()
def make_autoct(值):
def my_自动CT(pct):
总计=总和(值)
val=整数(四舍五入(百分比*总计/100.0))
返回“{p}%”。格式(p=val)
归还我的自动CT
定义饼图(总计,学生):
b=0
c=0
对于范围内的(学生):
如果总计[a]>=60:
b+=1
elif总计[a]<60:
c+=1
值=[b,c]
切片标签=(['Pass','Fail'])
爆炸=[0.05,0.05]
图1,ax1=plt.子批次(图大小=(5,5))
图1.子批次调整(0.1,0.1,1,1)
b=ax1.pie(值,标签=slice_标签,颜色=('b','k'),autoct=make_autoct(值),explode=explode,textprops={'color':“w”})
plt.legend(['Pass','Fail'],loc=8,bbox\u to\u anchor=(0.5,-0.25),ncol=2,fancybox=True)
课程名称(“学生及格/不及格表”)
ax1.轴(“相等”)
plt.show()
非常感谢有没有网站可以了解不同的颜色(颜色=“”,标签=“”)是的,