实验五 使用matplotlib绘制高级图表(一)

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()

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值