1. 考察知识点绘制棉棒图
编写程序。要求随机生成数据,其中y值要求有正负值,使用stem()函数绘制棉棒图,自定义设置茎头、棉棒图线段以及基线的样式。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成8个随机数据,范围从-20到20。
x = np.arange(1, 9)
y = np.random.randint(-20, 20, 8)
# stem函数:
# linefmt参数: 线条样式。‘-’实线; # ‘--’虚线; # ‘-.’点划线; # ‘:’ 点线
# markerfmt参数: 棉棒头部标记样式。支持常见的 blue , cyan , green , red , yellow , magenta , white , black。
# ‘.’小圆点; ‘o’大圆点; ‘s’正方形; ‘d’菱形; ‘p’五边形; ‘h’六边形; ‘v’倒三角形; ‘^’正三角形; ‘<’左三角形; ‘>’右三角形 ; ‘*’星形
# markerfmt参数中颜色可与线形组合,'bo':蓝色大圆点
# basefmt参数: 基线格式。设置格式可参考markerfmt参数。
plt.stem(x, y, linefmt='-.', markerfmt='bo', basefmt='g-', label='TestStem')
for x1, y1 in zip(x, y):
plt.text(x1, y1 + 0.5, y1, ha='center', va='bottom', fontsize=14)
plt.show()
2. 考察知识点绘制哑铃图
根据Gene.xlsx文件的数据,将ID列作为y轴的刻度标签,将A1、A2两列的数据作为数据点,再在两个数据点之间添加线条,绘制哑铃图。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel("D:\python\data\Gene.xlsx") #建议英文路径
# 生成新的索引标签
data.reset_index(inplace=True)
data = data.sort_values(by="index")
plt.scatter(y=data['index'], x=data['A1'], s=50, color='#7AC5CD', alpha=0.7) # 绘制散点图
plt.scatter(y=data['index'], x=data['A2'], s=50, color='#CD9B1D', alpha=0.7)
plt.xlim(0, 7)
plt.title("哑铃图", fontdict={'size': 12})
plt.yticks(data['index'], data['ID'])
for i, p1, p2 in zip(data['index'], data['A1'], data['A2']):
plt.plot([p1, p2], [i, i], color='skyblue') # 绘制线条
plt.grid(alpha=0.5, axis='x') # 显示垂直网格
plt.show()
3.考察知识点绘制人口金字塔图
根据2019年population.xlsx文件的数据,绘制我国2019
年人口金字塔图。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('D:\python\data\population.xlsx') #建议英文路径
# 按性别分组并获取Male数据
data_male = data.groupby(by='Gender').get_group('Male')
# 按性别分组并获取Female数据
data_Female = data.groupby(by='Gender').get_group('Female')
data_age = data.groupby('AgeGroup').sum() # 计算同一年龄段人口数量总和
y = np.arange(1, 11)
# 绘制人口金字塔图
plt.barh(y, list(data_male['Number']), tick_label=list(data_male['AgeGroup']), label=' 男', color='#63B8FF')
plt.barh(y, list(data_Female['Number']), tick_label=list(data_Female['AgeGroup']), label=' 女', color='#EE6AA7')
plt.ylabel("年龄段(岁)")
plt.xticks([-100000, -75000, -50000, -25000, 0, 25000, 50000, 75000, 100000],
['100000', '75000', '50000', '25000', '0', '25000', '50000', '75000', '100000'])
plt.xlabel("人数")
plt.title('我国2019年人口金字塔图')
plt.legend()
plt.show()