用python 绘制茎叶图和复合饼图

茎叶图

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 绘制茎叶图和复合饼图 的全部内容, 来源链接: utcz.com/z/358278.html

回到顶部