使用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…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
