栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Matplotlib】常用基本操作(更新ing)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Matplotlib】常用基本操作(更新ing)

学习心得

(1)

文章目录
  • 学习心得
  • 1.Matplotlib图像构成
  • 2.绘图基本步骤
  • 3.中文字符显示
  • 4.坐标轴字符刻度标注
  • 5.散点图
  • 6.线形图
  • 7.柱状图
  • 8.直方图
  • 9.饼图
  • 10.箱线图
  • 11.子图

Matplotlib是Python中一个二维绘图包,能够非常简单的实现数据可视化。Matplotlib最早由John Hunter于2002年启动开发,其目的是为了构建一个Matlab式的绘图函数接口。下面详细介绍Matplotlib图像构成、Matplotlib图像基本绘图流程、中文字符显示、坐标轴字符刻度标注等基本绘图知识。

为了方便快速绘图,Matplotlib通过pyplot模块(import matplotlib.pyplot as plt),提供了一套和Matlab类似的命令API,将众多绘图对象所构成的复杂结构隐藏在这套API内部,这些对象对应图形的一个个图形元素(如坐标轴、曲线、文字等),模块给每个对象分配函数,以此对该图形元素进行操作,而不影响其他部分。创建好画布后,只需调用pyplot模块所提供的函数,仅几行代码就可以实现添加、修改图形元素或在原有图形上绘制新图形。

1.Matplotlib图像构成

可以分为4个层次结构:
(1)canvas(画板):位于最底层,导入M库就自动存在;
(2)figure(画布):建立在canvas之上,从这一层就能开始设置其参数;
(3)axes(子图):将figure分成不同块,实现分面绘图;
(4)图表信息(构图元素):添加或修改axes上的图形信息,优化图表的显示效果。

2.绘图基本步骤
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 23 17:24:50 2021

@author: 86493
"""
import matplotlib.pyplot as plt
import numpy as np 
plt.figure(1) # 创建画布
x = np.linspace(0, 1, 1000)
plt.subplot(2, 1, 1)# 分为2*1的图形阵,选择第一章图片绘图
plt.title('y=x^2 & y=x')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim((0, 1))
plt.ylim((0, 1))
plt.xticks([0, 0.3, 0.6, 1])# 设置刻度
plt.yticks([0, 0.5, 1])
plt.plot(x, x ** 2)
plt.plot(x, x)
plt.legend(['y=x^2', 'y=x'])# 添加图例
plt.savefig('first.png')
plt.show()

3.中文字符显示
# 中文字符显示
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.2)
y = np.sin(x)
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体为SimHei
plt.rcParams['axes.unicode_minus'] = False # 解决负号"-"显示异常
plt.title('sin曲线')
plt.plot(x, y)
plt.savefig('third.png')
plt.show()

4.坐标轴字符刻度标注
# 坐标轴字符刻度标注
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) # 季度标号
y = np.array([100, 104, 106, 95, 103, 105, 115, 100])
v = ['2020年一季度', '2020年二季度','2020年三季度','2020年四季度',
     '2021年一季度','2021年二季度','2021年三季度','2021年四季度',]
plt.rcParams['font.sans-serif'] = 'SimHei'         # 设置字体为SimHei
plt.title('某产品2020-2021各季度销售额')
plt.plot(x, y)
plt.xlabel('季度')
plt.xticks(x, v, rotation = 45) # v为与x对应的字符刻度,rotation为旋转角度
plt.ylabel('销售额(万元)')
plt.show()

5.散点图
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 23 18:06:20 2021

@author: 86493
"""
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path = '一、车次上车人数统计表.xlsx'
data = pd.read_excel(path)
tb = data.loc[data['车次'] == 'D02', ['日期', '上车人数']]
x = np.arange(1, len(tb.iloc[:, 0])+1)
y1 = tb.iloc[:, 1]
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体为SimHei
plt.scatter(x, y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.xticks([1, 5, 10, 15, 20, 24], 
           tb['日期'].values[[0, 4, 9, 14, 19, 23]],
           rotation = 45)
# 2为与1对应的字符刻度
plt.title('D02车次上车人数散点图')

6.线形图
# 2.线性图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path='一、车次上车人数统计表.xlsx'
data=pd.read_excel(path)
# 筛选数据
tb = data.loc[data['车次'] == 'D02', ['日期', '上车人数']]
tb = tb.sort_values('日期')
tb1 = data.loc[data['车次'] == 'D03', ['日期', '上车人数']]
tb1 = tb1.sort_values('日期')
# 构造绘图所需的横轴数据列和纵轴数据列
x = np.arange(1, len(tb.iloc[:, 0]) + 1)
y1 = tb.iloc[:, 1]
y2 = tb1.iloc[:, 1]
# 定义绘图figure界面
plt.figure(1)
# 在figure界面上绘制两个线形图
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.plot(x, y1, 'r*--') # 红色*号连续图,绘制D02车次
plt.plot(x, y2, 'b*--') # 蓝色*号连续图,绘制D03车次
# 对横轴和纵轴打上中文标签
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('上车人数走势图') # 标题
plt.legend(['D02', 'D03']) # 图例
plt.xticks([1, 5, 10, 15, 20, 24], 
           tb['日期'].values[[0, 4, 9, 14, 19, 23]], 
           rotation = 45)
plt.savefig('myfigure1')

7.柱状图
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 24 16:07:29 2021

@author: 86493
"""
# 3.柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path='一、车次上车人数统计表.xlsx'
data=pd.read_excel(path)
# 筛选数据
tb = data.loc[data['车次'] == 'D02', ['日期', '上车人数']]
tb = tb.sort_values('日期')
tb1 = data.loc[data['车次'] == 'D03', ['日期', '上车人数']]
tb1 = tb1.sort_values('日期')
# 构造绘图所需的横轴数据列和纵轴数据列
x = np.arange(1, len(tb.iloc[:, 0]) + 1)
y1 = tb.iloc[:, 1]
y2 = tb1.iloc[:, 1]
plt.figure(2) # 创建画布
plt.bar(x, y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('D02车次上车人数柱状图')
plt.xticks([1, 5, 10, 15, 20, 24],
           tb['日期'].values[[0, 4, 9, 14, 19, 23]],
           rotation = 45)
plt.savefig('guofigure2')

8.直方图
# 直方图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path='一、车次上车人数统计表.xlsx'
data=pd.read_excel(path)
# 筛选数据
tb = data.loc[data['车次'] == 'D02', ['日期', '上车人数']]
tb = tb.sort_values('日期')
tb1 = data.loc[data['车次'] == 'D03', ['日期', '上车人数']]
tb1 = tb1.sort_values('日期')
# 构造绘图所需的横轴数据列和纵轴数据列
x = np.arange(1, len(tb.iloc[:, 0]) + 1)
y1 = tb.iloc[:, 1]
y2 = tb1.iloc[:, 1]

plt.figure(3)
plt.hist(y1)
plt.xlabel('上车人数')
plt.ylabel('频次')
plt.title('D02车次上车人数直方图')
plt.savefig('guofigure3')

9.饼图

原始数据还是上车人数那坨:

# 饼图
plt.figure(4) # 画布
# 1.计算D02~D06车次同期的上车人数总和,并用list1来保存其结果
D = data.iloc[:, 0]
D = list(D.unique()) # 车次号D02~D06,此处去重
list1 = [] # 预定义每个车次的上车人数列表
for d in D:
    # 计算每个车次的上车人数
    dt = data.loc[data['车次'] == d, ['上车人数']]
    s =dt.sum()
    # print(s,"n")
    list1.append(s['上车人数']) # 或者s[0]
# 2.绘制饼图
plt.pie(list1, labels = D, autopct = '%1.2f%%') # 绘制饼图,百分比保留小数点后两位
plt.title('各车次上车人数百分比饼图')
plt.savefig('guofigure4')

10.箱线图
# 箱线图
plt.figure(5)
plt.boxplot([y1.values, y2.values])
#print(y1.values)
plt.xticks([1, 2], ['D02', 'D03'], rotation = 0)
plt.title('D02、D03车次上车人数箱线图')
plt.ylabel('上车人数')
plt.xlabel('车次')
plt.savefig('guofigure5')

11.子图

将上面的几个图弄个大汇总,在同一幅画布上:

# 4.2.7 子图 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt  #导入绘图库中的pyplot模块,并且简称为plt
#读取数据 
path='一、车次上车人数统计表.xlsx';
data=pd.read_excel(path);
#筛选数据
tb=data.loc[data['车次'] == 'D02',['日期','上车人数']];
tb=tb.sort_values('日期');
tb1=data.loc[data['车次'] == 'D03',['日期','上车人数']];
tb1=tb1.sort_values('日期');
#构造绘图所需的横轴数据列和纵轴数据列
x=np.arange(1,len(tb.iloc[:,0])+1)
y1=tb.iloc[:,1]
y2=tb1.iloc[:,1]
plt.rcParams['font.sans-serif'] = 'SimHei'     # 设置字体为SimHei
plt.figure('子图')
plt.figure(figsize=(10,8)) 

plt.subplot(3,2,1)
plt.scatter(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.xticks([1,5,10,15,20,24], tb['日期'].values[[0,4,9,14,19,23]], rotation = 45) 
plt.title('D02车次上车人数散点图') 

plt.subplot(3,2,2)
plt.plot(x,y1,'r*--')
plt.plot(x,y2,'b*--')
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('上车人数走势图')
plt.legend(['D02','D03'])
plt.xticks([1,5,10,15,20,24], tb['日期'].values[[0,4,9,14,19,23]], rotation = 45) 

plt.subplot(3,2,3)
plt.bar(x,y1)
plt.xlabel('日期')
plt.ylabel('上车人数')
plt.title('D02车次上车人数柱状图')
plt.xticks([1,5,10,15,20,24], tb['日期'].values[[0,4,9,14,19,23]], rotation = 45) 

plt.subplot(3,2,4)
plt.hist(y1)
plt.xlabel('上车人数')
plt.ylabel('频数')
plt.title('D02车次上车人数直方图') 

plt.subplot(3,2,5)
D=data.iloc[:,0]
D=list(D.unique())  #车次号D02~D06
list1=[]    #预定义每个车次的上车人数列表
for d in D:
    dt=data.loc[data['车次'] == d,['上车人数']]
    s=dt.sum()
    list1.append(s['上车人数']) #或者s[0]
plt.pie(list1,labels=D,autopct='%1.2f%%') #绘制饼图,百分比保留小数点后两位 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号