这篇文章主要介绍了用python 绘制茎叶图和复合饼图,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
茎叶图
1 2 3 4 5 6 7 8 9 | 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))
|
输出:
1 2 3 4 5 6 7 8 9 | 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 按照分组函数的值对元素进行分组。
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> 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.循环加处理的例子
1 2 | >>> [ int (y) % 10 for y in [ 22 , 73 , 34 , 92 , 45 ]]
[ 2 , 3 , 4 , 2 , 5 ]
|
复合饼图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 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 绘制茎叶图和复合饼图的资料请关注脚本之家其它相关文章!
|