利用python matplotlib plt画茎叶图
数理统计老师布置了一个画茎叶图的作业,不太喜欢用excel做,就试着用python写了一个小程序来实现:
from matplotlib import pyplot as plt
def read_data():
data = []
lis1=[]#用来储存茎
lis2=[]#用来储存叶
with open('D:\python代码\小项目\智力问答测试\作业2(1).txt') as f: # 记得修改文件路径
for row in f:
data.append(int(row))
data.sort()
for i in data:
if i//10 not in lis1:
lis1.append(i//10)
lis1.sort()
for i in lis1:
lis_temp=[]#存储每个茎的叶
for j in data:
if j//10==i:
lis_temp.append(j%i)
if j%10>i:
break
lis2.append(lis_temp)
print(lis1,lis2)
return lis1,lis2
def draw_pic(lis1,lis2):
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize=(10,4))#单位是英寸
plt.plot([2,2],[1,len(lis1)+0.5])
plt.xlim((1.9,3.5))
plt.axis('off') # 去除坐标轴
# plt.text(1.9,1,'nihao',fontsize=20)
#输出茎
for i in range(len(lis1)):
plt.text(1.9,len(lis1)-i,str(lis1[i]),fontsize=12)
plt.text(1.9,len(lis1)+1,'茎',fontsize=15)
#输出叶
for j in range(len(lis2)):
plt.text(2.1,len(lis2)-j,','.join(map(str,lis2[j])),fontsize=12)
plt.text(2.1, len(lis1) + 1, '叶', fontsize=15)
plt.show()
if __name__ == '__main__':
lis1,lis2= read_data()
draw_pic(lis1,lis2)
实现效果如图所示,还行。