用python 绘制茎叶图和复合饼图
程序员文章站
2022-09-26 10:09:42
茎叶图from itertools import groupbynums2=[225, 232,232,245,235,245,270,225,240,240,217,195,225,185,200,...
茎叶图
from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,195,225,185,200, 220,200,210,271,240,220,230,215,252,225,220,206,185,227,236] for k, g in groupby(sorted(nums2), key=lambda x: int(x) // 10): print (k, list(g)) # print('k', k) # print('g', list(g)) lst = map(str, [int(y) % 10 for y in list(g)]) print (k, '|', ' '.join(lst))
输出:
18 | 5 5 19 | 5 20 | 0 0 6 21 | 0 5 7 22 | 0 0 0 5 5 5 5 7 23 | 0 2 2 5 6 24 | 0 0 0 5 5 25 | 2 27 | 0 1
说明:
1./ 就表示 浮点数除法,返回浮点结果; // 表示整数除法。
2.itertools.groupby 按照分组函数的值对元素进行分组。
>>> from itertools import groupby >>> x = groupby(range(10), lambda x: x < 5 or x > 8) >>> for condition, numbers in x: print(condition, list(numbers)) 输出: true [0, 1, 2, 3, 4] false [5, 6, 7, 8] true [9] >>> [k for k, g in groupby('aaaabbbccdaabbb')] ['a', 'b', 'c', 'd', 'a', 'b'] >>> [list(g) for k, g in groupby('aaaabbbccd')] [['a', 'a', 'a', 'a'], ['b', 'b', 'b'], ['c', 'c'], ['d']]
3.map(function, iterable, ...) 根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
4.循环加处理的例子
>>> [int(y) % 10 for y in [22,73,34,92,45]] [2, 3, 4, 2, 5]
复合饼图
import numpy as np import matplotlib as mpl from matplotlib import cm import matplotlib.pyplot as plt from matplotlib.patches import connectionpatch # 使图表元素中正常显示中文 mpl.rcparams['font.sans-serif'] = 'simhei' # 使坐标轴刻度标签正常显示负号 mpl.rcparams['axes.unicode_minus'] = false #制画布 fig = plt.figure(figsize=(9,5.0625), facecolor='cornsilk') ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) # 调整子区布局 fig.subplots_adjust(wspace=0) # 大饼图的制作 labels = ['成都','武汉','昆明','贵阳','西安','其它'] size = [802,530,477,256,233,307] # 分裂距离 explode=(0,0,0,0,0,0.1) ax1.pie(size, # 数据 autopct='%1.1f%%', # 锲形块的数据标签格式 startangle=30, # 锲形块开始角度 labels=labels, colors=cm.blues(range(10, 300, 50)), explode=explode) #小饼图的制作 labels2 = ['西宁','拉萨','乌鲁木齐','兰州'] size2 = [102,79, 76, 50] width=0.2 ax2.pie(size2, autopct='%1.1f%%', startangle=90, labels=labels2, colors=cm.blues(range(10, 300, 50)), radius=0.5, shadow=false) #使用connectionpatch画出两个饼图的间连线 #先得到饼图边缘的数据 theta1, theta2 = ax1.patches[-1].theta1, ax1.patches[-1].theta2 center, r = ax1.patches[-1].center, ax1.patches[-1].r #画出上边缘的连线 x = r*np.cos(np.pi/180*theta2)+center[0] y = np.sin(np.pi/180*theta2)+center[1] con1 = connectionpatch(xya=(0, 0.5), xyb=(x,y), coordsa=ax2.transdata, coordsb=ax1.transdata, axesa=ax2,axesb=ax1) print(-width/2, 0.5) print(x,y) #画出下边缘的连线 x = r*np.cos(np.pi/180*theta1) + center[0] y = np.sin(np.pi/180*theta1) + center[1] con2 = connectionpatch(xya=(-0.1, -0.49), xyb=(x,y), coordsa='data', coordsb='data', axesa=ax2,axesb=ax1) # 添加连接线 for con in [con1, con2]: con.set_color('gray') ax2.add_artist(con) con.set_linewidth(1) plt.show()
输出:
以上就是用python 绘制茎叶图和复合饼图的详细内容,更多关于python 绘制茎叶图和复合饼图的资料请关注其它相关文章!
上一篇: 你一天能吃二十四碗饭吗