import numpy as np
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
%matplotlib inline
线形图进阶 - Excel表实战
一、基本线性图
x = np.linspace(1, 10, 10)
y = np.random.rand(10) * 10
plt.plot(x, y)
plt.show()
1. plot()内参数
- - 实线
- -- 虚线
- -. 点划线
- : 点虚线、虚线
- " 留空或空格,没有线条
x = np.linspace(1, 10, 10)
y = np.random.rand(10) * 10
plt.plot(x, y,color = 'green', ls = '') # 空白
plt.show()
2. marker标记
- o 实心圈标记
- . 点标记
- 倒三角标记
- 上三角标记
- '>'右三角标记
- < 左三角标记
- '*' 星型标记
- '+ '十字标记
x = np.linspace(1, 10, 10)
y = np.random.rand(10) * 10
plt.plot(x, y,color = 'green', ls = '-.', marker ='o', markerfacecolor = 'r', markersize = 10)
plt.show()
3. 增加网格
x = np.linspace(1, 10, 10)
y = np.random.rand(10) * 10
plt.plot(x, y,color = 'green', ls = '-.', marker ='*', markerfacecolor = 'b', markersize = 8) # 空白
plt.grid(True)
plt.show()
4. 增加图例
显示图例一定要和label搭配使用
x = np.linspace(1, 10, 10)
y1 = np.random.rand(10) * 10
y2 = np.random.rand(10) * 10
plt.plot(x, y1, label = 'y1', color = 'green', ls = '-.', marker ='*', markerfacecolor = 'b', markersize = 8) # 空白
plt.plot(x, y2, label = 'y2', color = 'red', ls = ':', marker ='o', markerfacecolor = 'b', markersize = 8) # 空白
plt.legend()
plt.grid(True)
plt.show()
二、Excel表实战
import pandas as pd
fs = pd.read_excel('复试名单.xls')
print(fs)
考生报名号 考生编号 考生姓名 院系所名称 专业名称 研究方向名称 政治理论成绩 外国语成绩 \
0 420797711 105112121305535 吴俊泽 计算机学院 电子信息 不区分研究方向 73 81
1 420797734 105112121305518 刘欣雨 计算机学院 电子信息 不区分研究方向 76 84
2 420799426 105112121305507 王东煜 计算机学院 电子信息 不区分研究方向 75 70
3 424998483 105112121305488 赵子晴 计算机学院 电子信息 不区分研究方向 71 79
4 370284436 105112121623046 李龙 计算机学院 电子信息 不区分研究方向 81 82
.. ... ... ... ... ... ... ... ...
60 420796918 105112121623157 陈俊 计算机学院 电子信息 不区分研究方向 72 65
61 420796430 105112121305572 蔡娟 计算机学院 电子信息 不区分研究方向 59 72
62 420793741 105112121623018 王宇航 计算机学院 电子信息 不区分研究方向 72 70
63 322297328 105112121623238 柳振雄 计算机学院 电子信息 不区分研究方向 68 69
64 420796151 105112121305471 陈金坤 计算机学院 电子信息 不区分研究方向 66 70
业务课一成绩 业务课二成绩 总分 性别 民族 最后学历 毕业学校名称 考试方式 报考学习方式名称
0 122 127 403 男 汉族 本科毕业 武汉纺织大学 全国统考 全日制
1 121 110 391 女 汉族 本科毕业 华中师范大学 全国统考 全日制
2 131 113 389 男 汉族 本科毕业 华中师范大学 全国统考 全日制
3 129 103 382 男 汉族 本科毕业 华中师范大学 全国统考 全日制
4 116 102 381 男 汉族 本科毕业 青岛大学 全国统考 全日制
.. ... ... ... .. .. ... ... ... ...
60 114 70 321 女 汉族 本科毕业 湖北第二师范学院 全国统考 全日制
61 97 93 321 男 汉族 本科毕业 武汉商学院 全国统考 全日制
62 109 69 320 男 汉族 本科毕业 广西科技大学 全国统考 全日制
63 89 93 319 女 汉族 本科毕业 南京农业大学 全国统考 全日制
64 92 91 319 男 汉族 本科毕业 武汉科技大学 全国统考 全日制
[65 rows x 17 columns]
fs_name = fs.考生姓名
fs_score = fs.总分
fs_pro = fs.业务课二成绩
fs_num = fs.考生报名号
plt.bar(fs_name, fs_score, color = 'green')
plt.show()
# 解决x重叠的情况
plt.figure(figsize = (20, 8))
plt.bar(fs_name, fs_score, color = 'red')
plt.xticks(rotation = 90, color ='g') # 翻转九十度,并上色
plt.show()
# 两条曲线一起绘制
plt.figure(figsize = (20, 8))
# 应先将所有曲线绘制完毕后再来翻转坐标轴
plt.bar(fs_name, fs_score, color = 'red')
plt.plot(fs_name,fs_pro, color = 'k', ls='-.')
plt.xticks(rotation = 90, color ='g')
plt.show()
# 组合图
fig, ax1 = plt.subplots(figsize = (20, 8)) # 定义子画布大小
plt.figsize = (20, 8)
plt.xticks(rotation = '90', color = 'green')
plt.bar(fs_name, fs_score, color = 'm', label = '初试总分') # 定义主画布大小并绘制图片
ax1.tick_params(labelsize = 10)
plt.xlabel('考生姓名')
plt.ylabel('初试分数')
ax1.twinx()# 与主画布共享x轴
plt.plot(fs_pro, ls = '-.', color = 'k',label='专业课' )
plt.plot(0, label = '初试总分', color = 'm', lw = 6) # 用来为主图的plot占位,便于图例的显示
plt.ylabel('专业课分数')
plt.legend() # 不能直接加上图例
plt.show()
三、组合图实战
1. 基本用例
# 引入数据
data_dict={
1:[30, 15, 60], 2:[16, 22, 50], 3:[110, 90, 100],
4:[80, 72, 110], 5:[40, 80, 90], 6:[80, 100, 75],
7:[120, 76, 130], 8:[130, 110, 180], 9:[120, 210, 192],
10:[50, 80, 101], 11:[80, 60, 60], 12:[135, 150, 100],
}
x_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May','Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# 利用列表生成式得到三个人的数据
John = [x[0] for x in data_dict.values()] # 字典的三种遍历方式:items、keys、values
Mary = [x[1] for x in data_dict.values()]
Jack = [x[2] for x in data_dict.values()]
# 提取出月份,也就是字典的keys,keys只是iterable,而非list
months = list(data_dict.keys())
# 绘图
plt.figsize = (20, 8)
plt.plot(months, Mary, label = 'Mary', color ='g')
plt.plot(months, John, label = 'John', color ='r', ls = '-.')
plt.plot(months, Jack,'o-', label = 'Jack', color ='b')
plt.legend() # 图例
plt.grid(True) #显示网格
# 设置 x 轴 参数,第一个参数是原有参数,第二个是修改后的参数
plt.xticks(months, x_months)
plt.xlabel('Mon')
plt.ylabel('Salary')
plt.title('Income')
plt.show()
2.组合图
x = np.linspace(1, 10, 10)
y = np.random.rand(10)
# 注册总画布
fig = plt.figure()
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 2, 3)
fig.add_subplot(2, 2, 4)
plt.show()
fig = plt.figure()
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 1, 2) #注意此处的合并行
plt.show()
创建图表时可以传入的参数:
- figsize : 画布大小
- dpi :分辨率
- facecolor :窗口颜色
add_subplot(a, b, c) 一次只能创建一个子图
- a 整个画布的行数
- b 整个画布的列数
- c 当前子图的位置
- 返回一个axes对象
fig = plt.figure(facecolor = 'm')
# 成块配置信息
fig.add_subplot(2, 2, 1)
plt.plot(x, y)
plt.ylabel('第一张表的y轴')
fig.add_subplot(2, 2, 2)
plt.bar(x, y)
plt.ylabel('第二张表的y轴')
fig.add_subplot(2, 1, 2)
plt.scatter(x, y)
plt.title('第三张表的标题')
plt.show()