Matplotlib 03 - Higher Operation

159 阅读6分钟
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()

output_3_0.png

1. plot()内参数

  • - 实线
  • -- 虚线
  • -. 点划线
  • : 点虚线、虚线
  • " 留空或空格,没有线条
x = np.linspace(1, 10, 10)
y = np.random.rand(10) * 10

plt.plot(x, y,color = 'green', ls = '') # 空白
plt.show()

output_5_0.png

2. marker标记

  • o 实心圈标记
  • . 点标记
  • \vee 倒三角标记
  • \wedge 上三角标记
  • '>'右三角标记
  • < 左三角标记
  • '*' 星型标记
  • '+ '十字标记
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()

output_7_0.png

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

output_9_0.png

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

output_11_0.png

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

output_16_0.png

# 解决x重叠的情况
plt.figure(figsize  = (20, 8))
plt.bar(fs_name, fs_score, color = 'red')
plt.xticks(rotation = 90, color ='g') # 翻转九十度,并上色
plt.show()

output_17_0.png

# 两条曲线一起绘制

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

output_18_0.png

# 组合图
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()

output_19_0.png

三、组合图实战

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

output_23_0.png

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

output_25_0.png

fig = plt.figure()
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 1, 2) #注意此处的合并行

plt.show()

output_26_0.png

创建图表时可以传入的参数:

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

output_28_0.png