使用Pandas实现股票交易数据可视化
一、折线图:展现股价走势
1.1、简单版-股价走势图
# 简洁版import pandas as pdimport matplotlib.pyplot as plt# 读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')data = df[['high', 'close']].plot()plt.show()
首先通过df[['high','close']]从df中获取最高价和收盘价这两列特征数据,其为一个DataFrame数组对象,调用该对象的plot()对象,就可以完成绘制。
plot()函数生成图形时,默认将DataFrame对象的索引传给Matplotlib绘制X轴,DataFrame对象的各列数据作为Y轴分别绘制折线等图形。使用plt.show()函数展示。
| 参数名称 | 描述 |
|---|---|
| x | 指定应用于X轴的行标签或位置,默认为None,仅对DataFrame有效 |
| y | 指定应用于Y轴的行标签或位置,如果有多个,存放于list中,默认为None,仅对DataFrame有效 |
| kind | str,指定绘制的图形类型:"line":折线图(默认)。"density":密度图。"bar":条形图。"area":面积图。"barth":横向条形图。"pie":饼图。"hist":直方图。"scatter":散点图,需要指定X轴、Y轴**。"box":箱线图。"hexbin":蜂巢图,需要指定X轴、Y轴。"kde":密度图。 |
| ax | 绘制图形的subplot对象,默认为当前的subplot对象 |
| subplots | bool。是否针对不同列单独绘制子图 |
| sharex | 如果ax为None,则默认为True,否则为False |
| sharey | bool。在subplots=True前提下,如果有子图,子图是否共享Y轴,默认为False |
| figsize | 元组型。(wigth,height),指定画布尺寸大小,单位为英寸 |
| user_index | bool。是否使用索引作为X轴数据,默认为True |
| title | 标题 |
| grid | bool。是否显示网格 |
| legend | bool。是否显示网格的图例,默认为True |
| xticks | 序列。设置X轴的刻度值 |
| yticks | 序列。设置Y轴的刻度值 |
| xlim | 数值(最小值)、列表或元组(区间范围)。设置X轴范围 |
| ylim | 数值(最小值)、列表或元组(区间范围)。设置Y轴范围 |
| xlabel | 设置X轴的名称。默认使用行索引名。仅支持Pandas1.1.0及以上版本 |
| ylabel | 设置Y轴的名称。仅支持Pandas1.1.0及以上版本 |
| rot | int。设置轴刻度旋转角度,默认为None |
| fontsize | int。设置轴刻度字体大小 |
| colormap | string或colormap对象。设置图区域颜色 |
| secondary_y | bool或序列。是否需要在次Y轴上绘制,或者在次Y轴上绘制哪些列 |
| stacked | bool,是否创建堆积图。折线图和条形图默认为F alse,面积图默认为True |
1.2、美化版-股价走势图
import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号df = pd.read_csv('../数据集/格力电器.csv')data = df[['high','close']].head(22)# x轴刻度x_ticks = [i for i in range(data.shape[0])]# 美化版data.plot(title='最高价和收盘价的股价走势图',xlabel='行索引值', # 默认值ylabel='股价',xticks=x_ticks)plt.show() # 展示图形
1.3、添加日期的股价走势图
import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号df = pd.read_csv('../数据集/格力电器.csv')# 日期转换->'2024/04/08/date = df['trade_date'].astype(str)year = date.str[:4] # 提取前4位,即年份month=date.str[4:6] # 提取月day=date.str[6:8] # 提取日# 合并日期,格式为YYYY/MM/DD格式的字符串df['trade_date'] = year + '/' + month + '/' +daydf.sort_values(by='trade_date',inplace=True) # 由大到小排序x_ticks = [i for i in range(22)]df.head(22).plot(x='trade_date',y=['high','close'],xticks = x_ticks, # X轴刻度值rot=90, # X轴刻度值倾斜度fontsize=15, # 字体大小title='最高价和收盘价的股价走势图',xlabel='日期', # 默认值ylabel='股价',grid=True # 显示网格线)plt.show()
二、散点图:展示股价影响因素
2.1、散点图
使用plot()函数绘制散点图,将kind参数设置为"scatter"即可,

import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号# 读取数据df = pd.read_csv('../数据集/格力电器.csv')# ---------------------------## 绘制图形df.plot(x='vol',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和最高价之间的关系散点图',xlabel='成交量',ylabel='最高价',c='red',)# 展示图形plt.show()
2.2、散点图-子图
若还想展示成交量、成交额、收盘价、涨跌额、涨跌幅之间关系的散点图,可以作为子图放到一个大的画布中:
import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号df = pd.read_csv('../数据集/格力电器.csv') # # 读取数据fig,axes = plt.subplots(2,2) # 准备画布# 子图1:df.plot(x='vol',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和最高价之间的关系散点图',xlabel='成交量',ylabel='最高价',c='red',ax=axes[0][0])# 子图2:df.plot(x='vol',y='close',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交量和收盘价之间的关系散点图',xlabel='成交量',ylabel='收盘价',c='green',ax=axes[0][1])# 子图3:df.plot(x='amount',y='high',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交额和最高价之间的关系散点图',xlabel='成交额',ylabel='最高价',c='red',ax=axes[1][0])# 子图4:df.plot(x='amount',y='close',kind='scatter',# 默认为折线图,scatter为散点图title='格力电器成交额和收盘价之间的关系散点图',xlabel='成交额',ylabel='收盘价',c='green',ax=axes[1][1])plt.subplots_adjust(wspace=0.8, # 子图之间的距离hspace=0.5)plt.show()
三、条形图:展现同比成交量
import matplotlib.pyplot as pltimport pandas as pdplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号# 1、读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')date = df['trade_date'].astype(str)# 2、提取年和月year = date.str[:4]month = date.str[4:6]df['year'] = yeardf['month'] = month# 3、按照年和月分组,获取2018和2019年的每月平均成交量group = df[['year', 'month', 'vol']].groupby(by=['year', 'month']) # 按照年和月分组g_m = group.mean() # 获取所有字段的平均值m_18 = g_m['vol']['2018'] # 获取2018年每月平均成交量m_19 = g_m['vol']['2019'] # 获取2019年每月平均成交量# 4、将2018和2019年每月成交量平均值数据存储于DataFrame中df2 = pd.DataFrame(list(zip(m_18, m_19)), index=[str(i) + '月' for i in range(1, 13)], columns=['2018', '2019'], )# 5、绘制条形图df2.plot(kind='bar', # 条形图title='2018年和2019年格力电器每月平均成交量条形图',xlabel='月份',ylabel='成交量均量')plt.show()
若要绘制堆叠条形图,只需在plot()函数中将参数stacked设置为True即可。
若要将条形显示为横向条形图,只需将参数kind设置为barh即可。
四、饼图:展现成交量占比关系
import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文格式plt.rcParams['axes.unicode_minus'] = False # 正常显示负号#1、读取CSV文件df = pd.read_csv('../数据集/格力电器.csv')#2、提取年和月date = df['trade_date'].astype(str)year = date.str[:4] # 提取前4位,即年份month = date.str[4:6] # 提取月份df['year'] = year # 将年份插入到数据集中df['month'] = month # 将月份插入到数据集中#3、按照年和月分组,获取2018年每月总成交量group = df[['year','month','vol']].groupby(by=['year','month']) # 按年和月分组g_s = group.sum() # 获取所有字段总和s_18 = g_s['vol']['2018'] # 获取2018年每月总成交量s_18.index= [str(i) + '月' for i in range(1,13)]#4、绘制图形s_18.plot(kind='pie',title='2018年格力电器每月成交量占比',autopct='%.2f%%', # 百分比)plt.show()
五、K线图:展现股价走势
5.1、mplfinance的安装与下载
pip install mplfinance
5.2、绘制K线图
import mplfinance as mpfimport pandas as pddata = pd.read_csv('../数据集/格力电器.csv')data.sort_values(by=['trade_date'], inplace=True)date = data['trade_date'].astype(str)year = date.str[:4]month = date.str[4:6]day = date.str[6:8]data['trade_date'] = year + '/' + month + '/' + daydata.index = pd.DatetimeIndex(data['trade_date'])data = data[['open', 'close', 'high', 'low', 'vol']]data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']mpf.plot(data.head(70), # 绘制图形的数据(选取前70条)type='candle', # 设置图像类型volume=True, # 是否显示成交量style='charles')# 设置图表样式为"charles"
mplfinance的plot()函数的常用参数:
| 参数 | 描述 |
|---|---|
| type | 设置绘制的 图像类型,有'ohlc'、'candle'、'line'、'renko'类型 |
| volume | 是否显示成交量,默认不显示 |
| style | 设置的图表样式,可以通过mpf.available_style()方法获取mplfinance提供的样式名称,有'binance','blueskies','brasil'....。可以自定义样式。 |
| title | 设置标题 |
| ylabel | 设置主图Y轴标题 |
| ylabel_lower | 设置次图的Y轴标题 |
| mav | 设置均线,如2日均线,5日均线,10日均线等 |
| savefig | 保存图片 |
下面通过自定义图表样式来美化K线图:
import mplfinance as mpf
import pandas as pddata = pd.read_csv('../数据集/格力电器.csv')
data.sort_values(by=['trade_date'], inplace=True)
date = data['trade_date'].astype(str)year = date.str[:4]
month = date.str[4:6]
day = date.str[6:8]
data['trade_date'] = year + '/' + month + '/' + day
data.index = pd.DatetimeIndex(data['trade_date'])data = data[['open', 'close', 'high', 'low', 'vol']]
data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']# 设置K线颜色
my_color = mpf.make_marketcolors(up='red', # 设置阳线柱填充颜色down='green', # 设置阴线柱填充颜色edge='i', # 设置蜡烛线边缘颜色wick='black', # 设置蜡烛上下影线的颜色volume={'up': 'red', 'down': 'green'} # 设置成交量颜色)# 设置图表样式
my_style = mpf.make_mpf_style(marketcolors=my_color,gridaxis='both', # 设置网格线位置,both双向gridstyle='-.', # 设置网格线类型base_mpf_style='charles',rc={'font.family': 'SimHei'} # 设置字体为黑体)# 绘制K线图
mpf.plot(data.head(70),type='candle', # 设置图像类型'ohlc'/'candle'/'line/renko'mav=(2, 5, 10), # 绘制2日均线、5日均线和10日均线volume=True, # 显示成交量style=my_style, # 自定义图表样式title='格力电器2018年K线图', # 设置标题ylabel='价格', # 设置主图Y轴标题ylabel_lower='成交量' # 设置次图Y轴标题)

mplfinance的make_mpf_style()函数的常用参数:
| 参数 | 描述 |
|---|---|
| base_mpf_style | 使用mplfinance中的系统样式,可以在make_marketcolors方法中使用,也可以在make_mpf_style中使用 |
| base_mpl_style | 使用mplfinance中的系统样式,比如:base_mpl_style='seaborn' |
| marketcolors | 使用自定义样式 |
| mavcolors | 设置nav均线颜色,必须使用列表传递参数 |
| facecolor | 设置前景色 |
| edgecolor | 设置边缘线颜色 |
| figcolor | 设置填充色 |
| gridcolor | 设置网格线颜色 |
| gridaxis | 设置网格线方向,'both'、'horizontal'、'vertical‘ |
| gridstyle | 设置网格线线型。'-'[或solid]、’-’[或dashed]、'-.'[或dashdot]、':'[或dotted]、None |
| y_on_right | 设置Y轴位置是否在左右 |
| rc | 使用rcParams的dict设置样式,如果内容与上面自定义的设置相同,那么自定义设置覆盖rcParams设置 |
相关文章:
使用Pandas实现股票交易数据可视化
一、折线图:展现股价走势 1.1、简单版-股价走势图 # 简洁版import pandas as pdimport matplotlib.pyplot as plt# 读取CSV文件df pd.read_csv(../数据集/格力电器.csv)data df[[high, close]].plot()plt.show() 首先通过df[[high,close]]从df中获取最高价和收盘…...
蓝桥杯刷题-乌龟棋
312. 乌龟棋 - AcWing题库 /* 状态表示:f[b1,b2,b3,b4]表示所有第 i种卡片使用了 bi张的走法的最大分值。状态计算:将 f[b1,b2,b3,b4]表示的所有走法按最后一步选择哪张卡片分成四类:第 i类为最后一步选择第 i种卡片。比如 i2,则…...
美国纽扣电池认证标准要求16 CFR 第 1700和ANSI C18.3M标准
法规背景 为了纪念瑞茜哈姆史密斯(Reese Hamsmith)美国德州一名于2020年12月因误食遥控器里的纽扣电池而不幸死亡的18个月大的女婴。 美国国会于2022年8月16日颁布了H.R.5313法案(第117-171号公众法)也称为瑞茜法案(Reese’s Law)…...
华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具
文章目录 华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理工具1. 介绍2. 下载3. 静音模式、平衡模式、增强模式配置4. 配置电源方案与模式切换绑定5. 启动Ghelper控制面板6. 目前支持的设备型号 华硕ROG幻16笔记本电脑模式切换管理工具完美替代华硕奥创中心管理…...
【ROS2笔记六】ROS2中自定义接口
6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范,用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型…...
设计模式-代理模式(Proxy)
1. 概念 代理模式(Proxy Pattern)是程序设计中的一种结构型设计模式。它为一个对象提供一个代理对象,并由代理对象控制对该对象的访问。 2. 原理结构图 抽象角色(Subject):这是一个接口或抽象类࿰…...
中伟视界:智慧矿山智能化预警平台功能详解
矿山智能预警平台是一种高度集成化的安全监控系统,它能够提供实时的监控和报警功能,帮助企业和机构有效预防和响应潜在的安全威胁。以下是矿山智能预警平台的一些关键特性介绍: 报警短视频生成: 平台能够在检测到报警时自动生成短…...
如何在PPT中获得网页般的互动效果
如何在PPT中获得网页般的互动效果 效果可以看视频 PPT中插入网页有互动效果 当然了,获得网页般的互动效果,最简单的方法就是在 PPT 中插入网页呀。 那么如何插入呢? 接下来为你讲解如何获得(此方法在 PowerPoint中行得通&#…...
HTML段落标签、换行标签、文本格式化标签与水平线标签
目录 HTML段落标签 HTML换行标签 HTML格式化标签 加粗标签 倾斜标签 删除线标签 下划线标签 HTML水平线标签 HTML段落标签 在网页中,要把文字有条理地显示出来,就需要将这些文字分段显示。在 HTML 标签中,<p>标签用于定义段落…...
NVIC简介
NVIC(Nested Vectored Interrupt Controller)是ARM处理器中用于中断管理的一个重要硬件模块。它负责处理来自多个中断源的中断请求,并根据中断的优先级来安排处理器执行相应的中断服务例程(ISR)。NVIC是ARM Cortex-M系…...
LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】
LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】 题目描述:解题思路一:解题思路二:0解题思路三:0 题目描述: 给出了一个由 n 个节点组成的网络,用 n n 个邻接矩阵图…...
【linux】yum 和 vim
yum 和 vim 1. Linux 软件包管理器 yum1.1 什么是软件包1.2 查看软件包1.3 如何安装软件1.4 如何卸载软件1.5 关于 rzsz 2. Linux编辑器-vim使用2.1 vim的基本概念2.2 vim的基本操作2.3 vim命令模式命令集2.4 vim底行模式命令集2.5 vim操作总结补充:vim下批量化注释…...
excel试题转word格式
序号试题选项答案 格式如上。输出后在做些适当调整就可以。 import pandas as pd from docx import Document from docx.shared import Inches# 读取Excel文件 df pd.read_excel(r"你的excel.xlsx")# 创建一个新的Word文档 doc Document()# 添加标题 doc.add_headi…...
C语言学习笔记之指针(二)
指针基础知识:C语言学习笔记之指针(一)-CSDN博客 目录 字符指针 代码分析 指针数组 数组指针 函数指针 代码分析(出自《C陷阱和缺陷》) 函数指针数组 指向函数指针数组的指针 回调函数 qsort() 字符指针 一…...
在Debian 12系统上安装Docker
Docker 在 Debian 12 上的安装 安装验证测试更多信息 引言 在现代的开发环境中,容器技术发挥着至关重要的作用。Docker 提供了快速、可靠和易于使用的容器化解决方案,使开发人员和 DevOps 专业人士能够以轻松的方式将应用程序从一个环境部署到另一个环…...
策略者模式(代码实践C++/Java/Python)————设计模式学习笔记
文章目录 1 设计目标2 Java2.1 涉及知识点2.2 实现2.2.1 实现两个接口飞行为和叫行为2.2.2 实现Duck抽象基类(把行为接口作为类成员)2.2.3 实现接口飞行为和叫行为的具体行为2.2.4 具体实现鸭子2.2.5 模型调用 3 C(用到了大量C2.0的知识&…...
vue2/Vue3项目中,通过请求接口来刷新列表中的某个字段(如:Axios)
vue2/Vue3项目中,通过请求接口来刷新列表中的某个字段。可以使用 Vue 的异步请求库(如 Axios)来发送请求,并在请求成功后更新相应的字段。 示例如下(Vue2): 简单的示例如下,假设列…...
Java多线程锁定
前言 利用多线程编程虽然能极大地提升运行效率,但是多线程本身的不稳定也会带来一系列的问题,其中最经典莫过于售票问题;这时就需要人为地加以限制和干涉已解决问题,譬如今日之主题——锁定。 锁定是我们在多线程中用来解决售票…...
【C 数据结构】单链表
文章目录 【 1. 基本原理 】1.1 链表的节点1.2 头指针、头节点、首元节点 【 2. 链表的创建 】2.0 创建1个空链表(仅有头节点)2.1 创建单链表(头插入法)*2.2 创建单链表(尾插入法) 【 3. 链表插入元素 】【…...
[MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目
文章目录 获取资源从源码构建从CDN获取获取扩展插件 创建项目创建控件创建Blazor组件初始化保存销毁编写渲染逻辑 实现只读/编辑功能切换模式获取只读模式状态响应切换事件 实现明/暗主题切换项目地址 Editor.js 是一个基于 Web 的所见即所得富文本编辑器,它由CodeX…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
