Python--Matplotlib库与数据可视化③--Figures、Axes对象与多图绘制

简介: Python--Matplotlib库与数据可视化③--Figures、Axes对象与多图绘制

Matplotlib绘图的一大特色是面向对象绘图。面向对象绘图是指将图形的元素看作一个对象,众多对象具有隶属关系,不同对象拼凑成一个完整的图形。

1. Figure、Axes对象

1.1 Figure对象

类比一下生活中用纸笔绘图,我们需要先找到一张白纸,在白纸上绘图。使用Matplotlib面向对象绘图,绘图前我们要先创建一个Figure对象,Figure对象是一个空白区域。Figure对象可以通过pyplot包中的figure函数进行创建。

fig = plt.figure()

1.2 Axes对象

  • 在Matplotlib绘图中,每个Figure对象可以包含一个或者几个Axes对象,每个Axes对象即一个绘图区域,其拥有自己独立的坐标系统。
  • 由此也可以看出Axes对象依附于Figure对象。
# 创建两个Axes对象
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
  • 其中,[0.1, 0.1, 0.3, 0.3]和[0.5, 0.5, 0.4, 0.4]分别制定绘图区域,每个列表的前两个元素指定Axes对象区域的左下角坐标,后两个元素指定Axes对象在Figure图像坐标X方向和Y方向的长度。即将整个figure区域参考为长于宽均为1的区域,ax1的左下角会出现在整个figure界面的(0.1,0.1)坐标处,长宽分别为0.3和0.3;ax2的左下角会出现在(0.5,0.5)坐标处,长宽分别为0.4和0.4。
    具体如图所示:

在这里插入图片描述

1.3 绘制折线部分

  • 下边,在ax1中绘制最近10个交易日的收盘价曲线,在ax2中绘制最近10个交易日的开盘价曲线。
# 假设Open和Close为定义过的开盘价和收盘价的Series对象。
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
ax1.plot(Close[-10:])
ax2.plot(Open[-10:])

如图所示:
在这里插入图片描述

1.4 增加其他信息

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 =fig.add_axes([0.5, 0.5, 0.4, 0.4])
ax1.plot(Close[-10:])
ax2.plot(Open[-10:])
plt.rcParams['font.sans-serif'] = ['SimHei']   # 显示中文设置
ax1.set_title('近十个交易日收盘价')           # 设置标题
ax1.set_xlabel('日期')                               # 设置X坐标轴标签
ax1.set_xticklabels(Close.index[-10:], rotation=25)   # 设置刻度字体旋转角度
ax1.set_ylabel('收盘价')                         # Y坐标轴标签
ax1.set_ylim(27,35)                               # Y坐标轴取值范围
ax2.set_title('近十个交易日开盘价')
ax2.set_xlabel('日期')
ax2.set_xticklabels(Close.index[-10:], rotation=25)
ax2.set_ylabel('开盘价')
ax2.set_ylim(27,32)

在这里插入图片描述

2. 多图绘制

2.1多个子图绘制

  • 在实际绘图中,如果一个Figure对象包含多个Axes对象,每个Axes对象的位置除了通过区域坐标和长度来设定以外更常用的方式是通过子图subplot()函数来设定。
ax1=plt.subplot(221)
ax1.set_title('ax1')
ax2=plt.subplot(222)
ax2.set_title('ax2')
ax3=plt.subplot(223)
ax3.set_title('ax3')
ax4=plt.subplot(224)
ax4.set_title('ax4')

参数“221”中的“22”表示子图排列为2×2形式(2行2列),“1”表示第一个子图,默认次序为,先从第一行从左到右,再逐行向循环下计序。具体如图所示:
在这里插入图片描述
接下来,绘制北方华创(002371.SZ)股票2020年收盘价曲线图和成交量柱状图。若当日收盘价大于等于开盘价,则成交量柱状图棒的颜色为红色;若当日收盘价低于开盘价,则成交量棒为绿色。

  • 首先通过Tushare获取股价数据
# 导入相关的库
import tushare as ts      
import pandas as pd   
import matplotlib.pyplot as plt

# 设置token,即接口密匙, 获取方式及相关权限详情见Tushare官网。
token = 'Your token'     
pro = ts.pro_api(token)

 # 获取日行情的接口。
df = pro.daily(ts_code='002371.SZ')   
df['trade_date'] = pd.to_datetime(df['trade_date'])  
df.set_index(['trade_date'], inplace=True)

# 倒序,因为Tushare的数据最近日期默认显示在DataFrame上方位置。倒序方便后作图。
 df = df.sort_index()  
 # 取2020年的数据
Close = df.close['2020']   
Open = df.open['2020']
Vol = df.vol['2020']

绘图:

plt.rcParams['font.sans-serif'] = ['SimHei']   # 显示中文设置
ax1 = plt.subplot(211)  #2行1列
ax1.plot(Close,color='k')
ax1.set_ylabel('收盘价')
ax1.set_title('北方华创2020年收盘价曲线图')
ax2 = plt.subplot(212)
left1 = Vol.index[Close>=Open]
hight1 = Vol[left1]
ax2.bar(left1, hight1, color='r')
left2 = Vol.index[Close<Open]
hight2 = Vol[left2]
ax2.bar(left2, hight2, color='g')
ax2.set_ylabel('成交量')
ax2.set_title('北方华创2020年成交量柱状图')

图像效果如图所示:
在这里插入图片描述

2.2 一个图中多条曲线绘制

  • 将北方华创(002371.SZ)2020年的开盘价,最高价,最低价和收盘价曲线绘制在一张图中为例。代码如下:
# 提取出最高价和最低价
High = df.high['2020']
Low = df.low['2020']

plt.rcParams['font.sans-serif'] = ['SimHei']   # 显示中文设置

# 创建Axes对象
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

# 绘制四条曲线
ax.plot(Open, '--*', label='开盘价')
ax.plot(High, '-+', label='最高价')
ax.plot(Low, '-.>', label='最低价')
ax.plot(Close,label='收盘价')

# 在axes对象中增加文本对象
ax.set_title('北方华创2020年价格图')
ax.set_ylabel('价格')
ax.legend(loc='best')

效果展示如图:
在这里插入图片描述
前文回顾:
Python–Matplotlib库与数据可视化①–修改图像属性

Python–Matplotlib库与数据可视化②–常见图形的绘制(柱状图,直方图,饼图,箱线图)

目录
相关文章
|
8天前
|
数据采集 XML 存储
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
|
11天前
|
JSON 监控 API
python语言采集淘宝商品详情数据,json数据示例返回
通过淘宝开放平台的API接口,开发者可以轻松获取商品详情数据,并利用这些数据进行商品分析、价格监控、库存管理等操作。本文提供的示例代码和JSON数据解析方法,可以帮助您快速上手淘宝商品数据的采集与处理。
|
12天前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
16天前
|
存储 数据采集 JSON
Python爬取某云热歌榜:解析动态加载的歌曲数据
Python爬取某云热歌榜:解析动态加载的歌曲数据
|
17天前
|
数据采集 供应链 API
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
|
21天前
|
Web App开发 数据采集 数据安全/隐私保护
Selenium库详解:Python实现模拟登录与反爬限制的进阶指南
Selenium库详解:Python实现模拟登录与反爬限制的进阶指南
|
24天前
|
数据采集 存储 前端开发
用Python抓取亚马逊动态加载数据,一文读懂
用Python抓取亚马逊动态加载数据,一文读懂
|
24天前
|
数据采集 JSON 测试技术
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
146 83
|
25天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
49 12
|
1月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
54 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡